2015-06-16 2 views
1

Я установил в своем config/environment.rb файле ENV["RAILS_ENV"] = "production", чтобы запустить мой сервер на моей машине (используя rails server) и получить производственное поведение. У меня в моем коде много строк, которые проверяют, нужно ли Rails.env.production? назначать разные функции для некоторых компонентов приложения. Моя проблема заключается в том, что когда я проверяю среду в одном из моих контроллеров, я получаю разные результаты для Rails.env и ENV["RAILS_ENV"]. Первый покажет «развитие», а второй - «производство».rails 4: Rails.env отличается от ENV ["RAILS_ENV"]

Не должны ли оба метода возвращать одинаковое значение?

ответ

1

К тому времени, когда вы оценили конфигурацию config/environment.rb, вы просто изменяете хэш ENV. Если вы хотите запустить приложение в своем производстве, установите переменную среды RAILS_ENV в оболочке, которую вы используете для запуска рельсов.

RAILS_ENV = производство расслоение Exec рельсы гр

0

Для запуска сервера рельсов в производственном режиме запуска:

rails s -e production 

И ответить на ваш фактический вопрос:

Rails.env использует ENV["RAILS_ENV"] внутренне, см: https://github.com/rails/rails/blob/d25fe31c40928712b5e08fe0afb567c3bc88eddf/railties/lib/rails.rb#L59-L61

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

но ENV["RAILS_ENV"], который на самом деле не установлено до сих пор, так что вариант, который передается с -e, если передается в то время как команда рельсы сервер запускается входит в картину, см:

https://github.com/rails/rails/blob/3e36db4406beea32772b1db1e9a16cc1e8aea14c/railties/lib/rails/commands/server.rb#L62-64

def set_environment 
    ENV["RAILS_ENV"] ||= options[:environment] 
end 

для среда вариант см: https://github.com/rails/rails/blob/3e36db4406beea32772b1db1e9a16cc1e8aea14c/railties/lib/rails/commands/server.rb#L31

 opts.on("-e", "--environment=name", String, 
       "Specifies the environment to run this server under (test/development/production).", 
       "Default: development") { |v| options[:environment] = v } 

и все это происходит перед вашими приложениями environment.rb выполнен.

Надеюсь, это поможет.