【问题标题】:Rails: Per-environment initializers?Rails:每个环境的初始化程序?
【发布时间】:2014-08-18 02:21:52
【问题描述】:

我希望我的一个初始化程序(config/initializers/)中的代码仅针对:development 环境运行,而不是:test:production。最好的方法是什么?

将它粘贴到config/environments/test.rb 中似乎不干净,而且我不太喜欢将整个初始化程序文件包装在if Rails.env == 'development' do ... end 语句中。有一些规范的方法可以做到这一点吗?

(背景:为了加快测试加载时间,我正在尝试将 Barista gem 移动到我的 Gemfile:development 组中,但 config/initializers/barista_config.rb 调用 Barista.configure,所以现在它窒息了测试(和生产)模式。)

【问题讨论】:

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


    【解决方案1】:

    我很确定您仅有的两个选择是将配置代码放入 config/environments/development.rb 或使用您的 if 块包装您的初始化程序代码。不过,您可以通过 if Rails.env.development? 收紧您的第二个选项。

    【讨论】:

    • 另一个类似的模式是使用if defined?(Foo),如果 Foo gem 仅在开发或测试模式下加载。例如,Konacha 建议这样做。
    • 我喜欢 Konacha 方法 - 避免重复 Gemfile 中已经说明的内容。
    【解决方案2】:

    我不知道这是不是个好主意,但这是一个不同的主意。

    您可以创建一个config/initializers/development 目录(或config/environments/development/initializers),将您的barista_config.rb 放在该目录中,然后在该目录中包含config/environments/development.rb 中的任何内容。

    我不知道这是否是个好主意,但它至少是第三种选择......以防万一你在提出问题三年半后仍在考虑这个问题。

    【讨论】:

      【解决方案3】:

      Barista 对此有一个配置设置:

      Barista.configure do |c|
        c.env = :development
      end
      

      这只会在开发模式下将 coffescript 重新编译为 js,并且应该会加快您的测试速度。

      确保你运行:

      rake barista:brew
      

      在签入代码之前。

      https://github.com/Sutto/barista

      【讨论】:

      • Barista.env 设置 Barista 的环境,默认为Rails.env。无论Rails.env 是什么,强制它为:development 都会使其表现得好像您的应用程序处于开发模式。你不应该这样设置环境。
      猜你喜欢
      • 2010-11-17
      • 2012-09-13
      • 1970-01-01
      • 1970-01-01
      • 2015-01-27
      • 2012-09-19
      • 1970-01-01
      • 1970-01-01
      • 2012-05-05
      相关资源
      最近更新 更多