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

mas*_*ily 21 ruby-on-rails

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

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

Mat*_*att 43

您可以根据当前环境以不同的方式执行rake任务,并且可以通过传递RAILS_ENV=production给命令来更改任务运行的环境.将这两者结合使用可以产生类似的结果:

使用特定于环境的种子创建以下文件:

db/seeds/development.rb
db/seeds/test.rb
db/seeds/production.rb
Run Code Online (Sandbox Code Playgroud)

将此行放在基础种子文件中以运行所需的文件

load(Rails.root.join( 'db', 'seeds', "#{Rails.env.downcase}.rb"))
Run Code Online (Sandbox Code Playgroud)

调用种子任务:

rake db:seed RAILS_ENV=production 
Run Code Online (Sandbox Code Playgroud)

  • 我不知道这是不是更好的技巧.但它确实完美无缺. (4认同)

Bee*_*gie 9

我喜欢在一个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
Run Code Online (Sandbox Code Playgroud)

这样你就不需要在你的 rake 任务上转换 RAILS_ENV 属性,或者管理多个文件。您也可以包含Rails.env.test?,但我个人让 RSPEC 处理测试数据。