2014-04-01 76 views
3

即,當我在測試模式下運行應用程序(使用rails服務器)或者其他配置時,它以開發模式運行(沒有資產編譯或緩存等),但是當我將它部署到服務器時,生產模式。Rails如何知道在什麼環境下運行?

應用程序如何確定要使用的環境配置?

回答

7

的Rails通過檢查讀取操作系統的環境變量的當前環境中的優先順序如下:

  1. 通過調用ENV["RAILS_ENV"]
  2. 如果上面是零獲取RAILS_ENV環境變量的值,然後得到ENV["RACK_ENV"]
  3. 如果上述是零,則使其等於"development"

您可以通過查看Rails.env方法的定義看到Rails的源代碼的行爲:

def env 
    @_env ||= ActiveSupport::StringInquirer.new(ENV["RAILS_ENV"] || ENV["RACK_ENV"] || "development") 
end 

來源:https://github.com/rails/rails/blob/4-0-stable/railties/lib/rails.rb#L55-L57

這就是你所說的方法,當你寫Rails.env找出當前環境。

+0

啊,我明白了。所以通常情況下,當人們部署到服務器實例時,他們確保有一個環境變量RAILS_ENV ='production'或者他們想要的是什麼? – asolberg

+0

這是正確的。如果你想在生產模式下本地運行你的應用程序,那麼這也是你使用'RAILS_ENV = production bundle exec rails server'的原因。 – depa

+0

很好,謝謝澄清 – asolberg

相關問題