【问题标题】:How to use seed.rb to selectively populate development and/or production databases?如何使用 seed.rb 选择性地填充开发和/或生产数据库?
【发布时间】:2011-12-28 22:44:21
【问题描述】:

我正在使用 seed.rb 来填充我的开发和生产数据库。我通常用虚拟数据填充第一个数据,然后用我的应用程序需要运行的真实最小数据(例如第一个用户等)填充后者。

如何在 seed.rb 中指定每个数据的环境?

鉴于我知道“组”是一个 Gemfile 方法,我想为 seed.rb 实现相同的行为。

例如我想在我的seed.rb中写这样的东西:

group :development do 
  # development specific seeding code
end

group :production do 
  # production specific seeding code
end

# non-specific seeding code (it always runs) 

这样可以同时调用开发特定和非特定代码

$ rake db:seed

并调用生产特定和非特定代码:

$ rake db:seed RAILS_ENV=production 

谢谢

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 environment


    【解决方案1】:

    seeds.rb 只是一个普通的 ruby​​ 文件,所以有几种方法可以解决这个问题。案例陈述如何?

    # do common stuff here
    
    case Rails.env
    when "development"
       ...
    when "production"
       ...
    end
    

    【讨论】:

    • 你能提供更多细节吗?编码后,您使用什么命令?您如何确保只有更改进入生产数据库,而不是清除所有未指定的其他数据(如果种子为空,目标数据库可能认为您想清除其他数据)等。
    • @ahnbizcad 您通过config/database.yml 文件确保它。您在那里设置生产数据库目标,以及开发数据库。
    【解决方案2】:

    另一种方法可能是创建:

    db/seeds/development.rb
    db/seeds/production.rb
    db/seeds/any_other_environment.rb
    

    然后在db/seeds.rb:

    # Code you want to run in all environments HERE
    # ...
    load(Rails.root.join( 'db', 'seeds', "#{Rails.env.downcase}.rb"))
    

    然后在各自的文件中编写你想为每个环境运行的代码。

    【讨论】:

    • 不错。发现这很有用,但是我不想播种测试,因此您需要有一个空的种子/test.rb 文件,或者您可以捕获未找到的文件(以及其他错误),因此它不会终止测试。
    【解决方案3】:

    另一种方法,与@fabro 的回答非常相似: 将文件夹种子添加到 db/,其中包含环境名称和另一个名为 common.rb 的文件夹,因此您会得到如下内容:

    db/seeds/common.rb
    db/seeds/development.rb
    db/seeds/staging.rb
    db/seeds/production.rb
    

    比,在你的seed.rb:

    ActiveRecord::Base.transaction do
      ['common', Rails.env].each do |seedfile|
        seed_file = "#{Rails.root}/db/seeds/#{seedfile}.rb"
        if File.exists?(seed_file)
          puts "- - Seeding data from file: #{seedfile}"
          require seed_file
        end
      end
    end
    

    我更喜欢在一个事务中运行种子

    【讨论】:

    • 两周前的事情仍然相关且有用的那个美妙时刻。一定要喜欢 Rails 的成熟度
    • @zcserei *年
    猜你喜欢
    • 2012-02-25
    • 2012-04-08
    • 2017-01-13
    • 2012-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多