2011-01-27 69 views
40

我希望我的初始化程序(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,所以现在扼流圈,在试验(生产)模式。 )

回答

40

我很确定你只有两个选项是把配置代码放在config/environments/development.rb或者用你的if块封装你的初始化代码。不过,您可以通过做if Rails.env.development?来收紧第二个选项。

+7

另一个类似的图案是使用`如果定义?(富)`,如果富宝石在开发或测试模式仅加载。例如,[Konacha](https://github.com/jfirebaugh/konacha)建议这样做。 – 2012-04-30 20:15:23

+0

我喜欢Konacha方法 - 避免重复什么是在Gemfile中已经提到。 – ZoFreX 2015-01-19 22:05:27

1

咖啡师有这样的配置设置:

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

这只会重新编译coffescript成JS的开发模式,要加快你的测试。

请确保您运行:

rake barista:brew 

之前检查你的代码

https://github.com/Sutto/barista

3

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

您可以创建一个config/initializers/development目录(或config/environments/development/initializers),把你的barista_config.rb在该目录中,然后在包括从config/environments/development.rb该目录什么。

我不知道这是一个好主意或没有,但它至少第三种选择......万一你问的问题后,还想着几年这个问题三年半。