3
即,當我在測試模式下運行應用程序(使用rails服務器)或者其他配置時,它以開發模式運行(沒有資產編譯或緩存等),但是當我將它部署到服務器時,生產模式。Rails如何知道在什麼環境下運行?
應用程序如何確定要使用的環境配置?
即,當我在測試模式下運行應用程序(使用rails服務器)或者其他配置時,它以開發模式運行(沒有資產編譯或緩存等),但是當我將它部署到服務器時,生產模式。Rails如何知道在什麼環境下運行?
應用程序如何確定要使用的環境配置?
的Rails通過檢查讀取操作系統的環境變量的當前環境中的優先順序如下:
ENV["RAILS_ENV"]
RAILS_ENV
環境變量的值,然後得到ENV["RACK_ENV"]
"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
找出當前環境。
啊,我明白了。所以通常情況下,當人們部署到服務器實例時,他們確保有一個環境變量RAILS_ENV ='production'或者他們想要的是什麼? – asolberg
這是正確的。如果你想在生產模式下本地運行你的應用程序,那麼這也是你使用'RAILS_ENV = production bundle exec rails server'的原因。 – depa
很好,謝謝澄清 – asolberg