Ruby on rails RubyonRails:为环境创建不同种子文件的方法

Ruby on rails RubyonRails:为环境创建不同种子文件的方法,ruby-on-rails,Ruby On Rails,如何使任务rake db:seed在生产和开发中使用不同的seeds.rb文件 编辑:任何更好的策略都是受欢迎的您可以让一个rake任务根据当前环境进行不同的行为,并且您可以通过向命令传递RAILS\u ENV=production来更改任务运行的环境。将这两者结合使用,可以产生如下结果: 使用特定于环境的种子创建以下文件: db/seeds/development.rb db/seeds/test.rb db/seeds/production.rb 将此行放在基本种子文件中以运行所需的文件

如何使任务
rake db:seed
在生产和开发中使用不同的seeds.rb文件


编辑:任何更好的策略都是受欢迎的

您可以让一个rake任务根据当前环境进行不同的行为,并且您可以通过向命令传递
RAILS\u 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负责测试数据。

看看这里:这仍然是Rails 4的首选技术吗?我不知道这是否是首选技术。但它确实非常完美,正是我想要的。我还创建了一些其他定制环境,如ci和qa。只需确保在database.yml和config/environments文件夹中也定义了这些其他文件。