Rails:每个环境初始化程序?
我希望我的初始化程序(config/initializers/
)中的代码只能在:development
环境中运行,但不能运行在:test
或:production
之间。什么是最好的方式来做到这一点?Rails:每个环境初始化程序?
将它粘贴到config/environments/test.rb
似乎不太清晰,我不太喜欢用if Rails.env == 'development' do ... end
声明包装整个初始化文件。有没有一些规范的方法来做到这一点?
(背景:为加快测试加载时间,我想在咖啡师的宝石移动到:development
组我Gemfile
,但config/initializers/barista_config.rb
调用Barista.configure
,所以现在扼流圈,在试验(生产)模式。 )
我很确定你只有两个选项是把配置代码放在config/environments/development.rb
或者用你的if
块封装你的初始化代码。不过,您可以通过做if Rails.env.development?
来收紧第二个选项。
咖啡师有这样的配置设置:
Barista.configure do |c|
c.env = :development
end
这只会重新编译coffescript成JS的开发模式,要加快你的测试。
请确保您运行:
rake barista:brew
之前检查你的代码
我不知道这是否是一个好主意,但它是一个不同的想法。
您可以创建一个config/initializers/development
目录(或config/environments/development/initializers
),把你的barista_config.rb
在该目录中,然后在包括从config/environments/development.rb
该目录什么。
我不知道这是一个好主意或没有,但它至少第三种选择......万一你问的问题后,还想着几年这个问题三年半。
另一个类似的图案是使用`如果定义?(富)`,如果富宝石在开发或测试模式仅加载。例如,[Konacha](https://github.com/jfirebaugh/konacha)建议这样做。 – 2012-04-30 20:15:23
我喜欢Konacha方法 - 避免重复什么是在Gemfile中已经提到。 – ZoFreX 2015-01-19 22:05:27