- Konu sahibi
- #1
İlk başlangıç kayıtlarını Rails uygulamasındaki
Rails, başlangıç verilerini
Örneğin uygulamanızda
Buradaki
Yeni bir uygulamada önce migration dosyalarını çalıştırın:
Bu komut, henüz uygulanmamış migration dosyalarını veritabanına uygular ve modellerin ihtiyaç duyduğu tabloları oluşturur. Ardından başlangıç verilerini ekleyin:
Komut başarılı olursa Rails,
Bu komutun doğru sunucuda ve doğru veritabanı bağlantısıyla çalıştırıldığından emin olun. Üretim ortamında seed çalıştırmak mevcut veritabanına kayıt ekleyebilir; işlemden önce hangi kayıtların oluşturulacağını ve komutun hangi veritabanına bağlandığını kontrol edin.
Seed işlemi tamamlandıktan sonra Rails konsolunu açın:
Ardından oluşturulan kayıtları sorgulayın:
Örneğin
Beklenen kategori adı görünmüyorsa model ilişkisini,
Seed dosyası çoğu zaman birden fazla kez çalıştırılır. Bu nedenle doğrudan
Aynı başlangıç kullanıcısının tekrarlanmasını istemiyorsanız benzersiz alan üzerinden arayıp oluşturun:
Bu yaklaşım mevcut kaydı otomatik olarak güncellemez. Kayıt zaten varsa blok içindeki başlangıç değerleri yeniden uygulanmaz. Mevcut kaydın da güncellenmesi gerekiyorsa bunu açıkça yazın:
Parola gibi hassas bilgileri seed dosyasına sabit olarak koymak yerine ortam değişkeni veya güvenli bir gizli bilgi yönetimi yöntemi kullanın. Seed dosyasını paylaşılan bir depoya gönderiyorsanız gerçek üretim parolalarını, erişim anahtarlarını ve kişisel verileri eklemeyin.
Her seed verisi aynı amaçla kullanılmaz. Uygulamanın çalışması için zorunlu olan roller, varsayılan ayarlar veya sistem kategorileri ile yalnızca geliştirme sırasında kullanılan deneme kayıtlarını ayırmak daha güvenlidir.
Bu koşul, örnek ürünlerin üretim ortamında oluşturulmasını engeller. Ancak sabit sistem kayıtlarının da yanlışlıkla üretimde atlanmaması için hangi kayıtların koşul içinde bulunduğunu dikkatle ayırın.
db/seeds.rb dosyasına yazıp proje kök dizininde bin/rails db:seed komutunu çalıştırabilirsiniz. Önce veritabanı tablolarının oluşturulmuş olması gerekir; yeni veya boş bir ortamda genellikle sırasıyla bin/rails db:migrate ve bin/rails db:seed çalıştırılır. Komut tamamlandığında kayıtları Rails konsolundan sorgulayarak verilerin gerçekten eklendiğini kontrol edin.db/seeds.rb dosyasını hazırlama
Rails, başlangıç verilerini
db/seeds.rb dosyasından yükler. Bu dosya; geliştirme ortamında örnek kullanıcı, kategori veya ayar kayıtları oluşturmak, yeni kurulan bir uygulamayı temel verilerle hazırlamak ve dağıtım sırasında gerekli sabit kayıtları eklemek için kullanılabilir.Örneğin uygulamanızda
Category modeli ve Product modeli olduğunu varsayalım. db/seeds.rb dosyasına şu kodu ekleyebilirsiniz:
Ruby:
news = Category.find_or_create_by!(name: "Haberler")
books = Category.find_or_create_by!(name: "Kitaplar")
Product.find_or_create_by!(name: "Ruby’ye Giriş") do |product|
product.category = books
product.price = 299.90
end
Product.find_or_create_by!(name: "Rails Başlangıç Rehberi") do |product|
product.category = news
product.price = 199.90
end
Buradaki
find_or_create_by! kullanımı önemlidir. Kayıt aynı arama koşullarıyla zaten varsa yeni kayıt oluşturulmaz; yoksa kayıt eklenir. Bu nedenle seed komutunu ikinci kez çalıştırdığınızda aynı isimle gereksiz kopyalar oluşması önlenir. Ancak bunun çalışması için kullanılan arama alanlarının gerçekten benzersiz olması gerekir. Örneğin name veritabanında benzersiz değilse, aynı ada sahip eski bir kayıt farklı bilgilerle bulunabilir. Bu tür durumlarda model doğrulamasına ek olarak veritabanı düzeyinde benzersiz indeks kullanmak daha güvenlidir.Tabloları oluşturmadan seed çalıştırmayın
Yeni bir uygulamada önce migration dosyalarını çalıştırın:
Bash:
bin/rails db:migrate
Bu komut, henüz uygulanmamış migration dosyalarını veritabanına uygular ve modellerin ihtiyaç duyduğu tabloları oluşturur. Ardından başlangıç verilerini ekleyin:
Bash:
bin/rails db:seed
Komut başarılı olursa Rails,
db/seeds.rb içindeki Ruby kodunu uygulamanın seçili ortamında çalıştırır. Ortam belirtilmemişse genellikle geliştirme ortamının veritabanı kullanılır. Üretim veritabanına veri eklemek istiyorsanız ortamı açıkça belirtin:
Bash:
RAILS_ENV=production bin/rails db:seed
Bu komutun doğru sunucuda ve doğru veritabanı bağlantısıyla çalıştırıldığından emin olun. Üretim ortamında seed çalıştırmak mevcut veritabanına kayıt ekleyebilir; işlemden önce hangi kayıtların oluşturulacağını ve komutun hangi veritabanına bağlandığını kontrol edin.
Eklenen kayıtları kontrol etme
Seed işlemi tamamlandıktan sonra Rails konsolunu açın:
Bash:
bin/rails console
Ardından oluşturulan kayıtları sorgulayın:
Ruby:
Category.count
Product.count
Product.pluck(:name, :price)
Örneğin
Product.count beklediğiniz sayıdan büyükse bu, seed dosyasının daha önce var olan kayıtları da saydığı anlamına gelebilir; tek başına komutun her çalıştırmada yeni kayıt eklediğini kanıtlamaz. Product.pluck(:name, :price) çıktısında beklenen ürün adlarını ve fiyatları görmeniz, kayıtların ilgili alanlarla oluşturulduğunu gösterir. İlişkinin doğru kurulup kurulmadığını ayrıca kontrol etmek için şu sorguyu kullanabilirsiniz:
Ruby:
Product.includes(:category).pluck(:name, "categories.name")
Beklenen kategori adı görünmüyorsa model ilişkisini,
category_id alanını ve seed dosyasında ilişkinin hangi sırada atandığını kontrol edin. Tablo bulunamadı hatası alırsanız önce ilgili migration dosyasının uygulanıp uygulanmadığını bin/rails db:migrate:status ile inceleyin. Bir kayıt doğrulama hatası veriyorsa hata mesajındaki alanı ve db/seeds.rb içindeki değeri karşılaştırın; seed komutu hata aldığı noktadan sonraki satırları çalıştırmayabilir.Tekrar çalıştırılabilir seed yazma
Seed dosyası çoğu zaman birden fazla kez çalıştırılır. Bu nedenle doğrudan
create! kullanmak her çalıştırmada yeni kopyalar oluşturabilir:
Ruby:
User.create!(email: "[email protected]", name: "Yönetici")
Aynı başlangıç kullanıcısının tekrarlanmasını istemiyorsanız benzersiz alan üzerinden arayıp oluşturun:
Ruby:
User.find_or_create_by!(email: "[email protected]") do |user|
user.name = "Yönetici"
user.password = "geçici-bir-şifre"
end
Bu yaklaşım mevcut kaydı otomatik olarak güncellemez. Kayıt zaten varsa blok içindeki başlangıç değerleri yeniden uygulanmaz. Mevcut kaydın da güncellenmesi gerekiyorsa bunu açıkça yazın:
Ruby:
admin = User.find_or_initialize_by(email: "[email protected]")
admin.name = "Yönetici"
admin.save!
Parola gibi hassas bilgileri seed dosyasına sabit olarak koymak yerine ortam değişkeni veya güvenli bir gizli bilgi yönetimi yöntemi kullanın. Seed dosyasını paylaşılan bir depoya gönderiyorsanız gerçek üretim parolalarını, erişim anahtarlarını ve kişisel verileri eklemeyin.
Sabit veriler ile örnek verileri ayırma
Her seed verisi aynı amaçla kullanılmaz. Uygulamanın çalışması için zorunlu olan roller, varsayılan ayarlar veya sistem kategorileri ile yalnızca geliştirme sırasında kullanılan deneme kayıtlarını ayırmak daha güvenlidir.
- Sistemin çalışması için gereken kayıtları genel seed dosyasında tutun.
- Yalnızca geliştirme verilerini ayrı bir görevde veya koşul bloğunda çalıştırın.
- Üretimde kullanılmaması gereken sahte kullanıcı ve örnek içerikleri üretim seed işlemine dahil etmeyin.
- Seed kodunu mümkün olduğunca tekrar çalıştırılabilir ve açıkça tanımlanmış arama koşullarına sahip yazın.
Ruby:
if Rails.env.development?
10.times do |number|
Product.find_or_create_by!(name: "Örnek ürün #{number + 1}") do |product|
product.price = 100
end
end
end
Bu koşul, örnek ürünlerin üretim ortamında oluşturulmasını engeller. Ancak sabit sistem kayıtlarının da yanlışlıkla üretimde atlanmaması için hangi kayıtların koşul içinde bulunduğunu dikkatle ayırın.