R.Reddington

WFN Üye
Konular
562
Mesajlar
562
Çözüm
0
Ticaret Puanı
0
Üyelik
24 Gün
Konum
Kastamonu
Web Sitesi
Var
Alanı
Sosyal Backlink
1/1
Konu sahibi
İlk başlangıç kayıtlarını Rails uygulamasındaki 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.
Örneğin geliştirme verilerini yalnızca geliştirme ortamında oluşturmak için:

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.
 

Sende şimdi bize katılmak ister misin?

Kayıt ol

Bize katılım kolay ve ücretsizdir!

Foruma git ?

Bu konuyu görüntüleyen kullanıcılar

Bu konuyu şu anda görüntüleyen üye bulunmuyor.
Robotlar:
  • Anthropic