2011-12-28 12 views
44

मैं अपने विकास और उत्पादन डेटाबेस दोनों को पॉप्युलेट करने के लिए seed.rb का उपयोग कर रहा हूं। मैं आमतौर पर पहले डमी डेटा के साथ पहली बार पॉप्युलेट करता हूं और बाद में वास्तविक न्यूनतम डेटा के साथ जो मेरे ऐप को चलाने की आवश्यकता होती है (जैसे पहला उपयोगकर्ता और इसी तरह)।चुनिंदा विकास और/या उत्पादन डेटाबेस को चुनने के लिए seed.rb का उपयोग कैसे करें?

मैं प्रत्येक डेटा के पर्यावरण के लिए seed.rb में कैसे निर्दिष्ट कर सकता हूं?

यह देखते हुए कि मुझे "समूह" एक Gemfile विधि होने के बारे में पता है, मैं seed.rb के लिए एक ही व्यवहार प्राप्त करना चाहता हूं।

उदा। मैं अपने seed.rb में कुछ इस तरह लिखने के लिए करना चाहते हैं:

group :development do 
    # development specific seeding code 
end 

group :production do 
    # production specific seeding code 
end 

# non-specific seeding code (it always runs) 

इस विकास-विशिष्ट और

$ rake db:seed 

साथ और कॉल करने के लिए गैर विशिष्ट कोड कॉल करने के लिए दोनों सक्षम होने के लिए दोनों उत्पादन विशिष्ट और साथ गैर विशिष्ट कोड:

$ rake db:seed RAILS_ENV=production 

धन्यवाद

उत्तर

60

seeds.rb सिर्फ एक सादे रूबी फ़ाइल है, इसलिए आप इस दृष्टिकोण से कई तरीके हैं। केस स्टेटमेंट के बारे में कैसे?

# do common stuff here 

case Rails.env 
when "development" 
    ... 
when "production" 
    ... 
end 
+1

आप और अधिक विस्तार प्रदान कर सकते हैं? एक बार जब आप इसे कोड करते हैं, तो आप किस आदेश का उपयोग करते हैं? आप कैसे सुनिश्चित करते हैं कि केवल परिवर्तन डेटाबेस में परिवर्तन हो जाएं, और निर्दिष्ट सभी अन्य डेटा मिटाएं (लक्षित डेटाबेस सोच सकता है कि यदि आप उसके लिए बीज खाली हैं तो अन्य डेटा मिटा देना चाहते हैं) आदि – ahnbizcad

+0

@ahnbizcad आप इसे सुनिश्चित करते हैं 'config/database.yml' फ़ाइल के माध्यम से। आप वहां उत्पादन डेटाबेस लक्ष्य, साथ ही विकास डेटाबेस सेट करते हैं। – ruzenhack

31

एक और दृष्टिकोण बनाने जा सकता है:

db/seeds/development.rb 
db/seeds/production.rb 
db/seeds/any_other_environment.rb 

फिर db/seeds.rb में:

# Code you want to run in all environments HERE 
# ... 
load(Rails.root.join('db', 'seeds', "#{Rails.env.downcase}.rb")) 

तो कोड आप संबंधित फाइल में प्रत्येक परिवेश के लिए चलाना चाहते हैं लिखें।

+2

अच्छा। यह उपयोगी पाया गया है, हालांकि मैं बीज परीक्षण नहीं करना चाहता था, इसलिए आपको खाली बीज/test.rb फ़ाइल की आवश्यकता है या आप फ़ाइल को नहीं ढूंढ सकते हैं (अन्य त्रुटियों के साथ) ताकि यह परीक्षण समाप्त न हो। – Ben

6

एक और दृष्टिकोण, काफी @ Fabro के जवाब के समान:,

db/seeds/common.rb 
db/seeds/development.rb 
db/seeds/staging.rb 
db/seeds/production.rb 
से

अपने seed.rb में: , पर्यावरण के नाम और एक अन्य नामित common.rb साथ db/ के लिए एक फ़ोल्डर बीज जोड़ें ताकि आप की तरह कुछ मिलता है :

ActiveRecord::Base.transaction do 
    ['common', Rails.env].each do |seedfile| 
    seed_file = "#{Rails.root}/db/seeds/#{seedfile}.rb" 
    if File.exists?(seed_file) 
     puts "- - Seeding data from file: #{seedfile}" 
     require seed_file 
    end 
    end 
end 

मैं एक लेन-देन बीज चल perfer

संबंधित मुद्दे