2011-01-27 67 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該目錄什麼。

我不知道這是一個好主意或沒有,但它至少第三種選擇......萬一你問的問題後,還想着幾年這個問題三年半。