2013-05-29 33 views
14

Làm cách nào để tạo một tác vụ rake db:seed để sử dụng các tệp seed.rb khác nhau về sản xuất và phát triển?Ruby On Rails: cách tạo các tệp hạt giống khác nhau cho các môi trường

chỉnh sửa: bất kỳ chiến lược tốt hơn sẽ được chào đón

+2

hãy xem tại đây: http://stackoverflow.com/questions/8662127/how-to-use-seed-rb-to-selectively-populate-development-and-or-production-databas – flyingjamus

Trả lời

32

Bạn có thể có một nhiệm vụ cào cư xử khác nhau dựa trên môi trường hiện tại, và bạn có thể thay đổi môi trường là một nhiệm vụ chạy trong bằng cách thông qua RAILS_ENV=production để lệnh. Sử dụng hai này lại với nhau bạn có thể tạo ra một cái gì đó giống như vậy:

Tạo các tập tin sau đây với môi trường hạt cụ thể của bạn:

db/seeds/development.rb 
db/seeds/test.rb 
db/seeds/production.rb 

Nơi dòng này trong tập tin hạt cơ sở của bạn để chạy các tập tin mong muốn

load(Rails.root.join('db', 'seeds', "#{Rails.env.downcase}.rb")) 

Gọi cho nhiệm vụ hạt giống:

rake db:seed RAILS_ENV=production 
+0

Đây vẫn là kỹ thuật nào thích hợp hơn cho Rails 4? – Donato

+3

Tôi không biết đó có phải là kỹ thuật thích hợp hơn không. Nhưng chắc chắn là địa ngục hoạt động hoàn hảo. – rryter

+0

Chỉ là những gì tôi đang tìm kiếm. Tôi đã thực hiện một số môi trường tùy chỉnh khác như ci và qa. Chỉ cần chắc chắn rằng những người khác cũng được định nghĩa trong database.yml và trong thư mục config/environment. – ed209

2

Tôi thích thực hiện tất cả các hạt giống trong bên một tập tin seed.rb và sau đó chỉ tách các môi trường bên trong.

if Rails.env.production? 
    State.create(state: "California", state_abbr: "CA") 
    State.create(state: "North Dakota", state_abbr: "ND") 
end 

if Rails.env.development? 
    for 1..25 
    Orders.create(order_num: Faker::Number:number(8), order_date: Faker::Business.credit_card_expiry_date) 
    end 
end 

Bằng cách đó bạn không cần phải bỏ thuộc tính RAILS_ENV vào tác vụ cào của bạn hoặc quản lý nhiều tệp. Bạn cũng có thể bao gồm Rails.env.test?, nhưng cá nhân tôi cho phép RSPEC xử lý dữ liệu thử nghiệm.

Các vấn đề liên quan