Ruby On Rails:为环境创建不同种子文件的方法

如何让任务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负责测试数据。