如何使任务rake db:seed
在生产和开发中使用不同的seeds.rb 文件?
编辑:欢迎任何更好的策略
您可以根据当前环境让 rake 任务表现不同,并且可以通过传递RAILS_ENV=production
给命令来更改任务运行的环境。将这两者结合使用,您可以生成如下内容:
使用您的环境特定种子创建以下文件:
db/seeds/development.rb
db/seeds/test.rb
db/seeds/production.rb
将此行放在您的基本种子文件中以运行所需的文件
load(Rails.root.join( 'db', 'seeds', "#{Rails.env.downcase}.rb"))
调用种子任务:
rake db:seed RAILS_ENV=production
我喜欢在一个文件中实现所有种子seed.rb
,然后将其中的环境分开。
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
这样你就不需要在你的 rake 任务上强制转换 RAILS_ENV 属性,或者管理多个文件。您也可以包含Rails.env.test?
,但我个人让 RSPEC 负责测试数据。