rails 4:Rails.env与ENV [“RAILS_ENV”]不同

时间:2015-06-16 12:33:10

标签: ruby-on-rails

我在我的config/environment.rb文件ENV["RAILS_ENV"] = "production"中设置,以便在我的计算机上运行我的服务器(使用rails server)并获取生产行为。我的代码中有很多行,用于检查Rails.env.production?是否为某些应用程序组件分配了不同的功能。 我的问题是,当我在我的某个控制器中检查环境时,我会得到Rails.envENV["RAILS_ENV"]的不同结果。第一个将显示“开发”,而第二个将显示“生产”。

两种方法都不应该返回相同的值吗?

2 个答案:

答案 0 :(得分:1)

当评估config / environment.rb时,你只是修改ENV哈希。如果要在生产环境中运行应用程序,请在用于运行rails的shell中设置RAILS_ENV环境变量。

RAILS_ENV =生产包exec rails c

答案 1 :(得分:0)

要在生产模式下运行rails服务器:

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"]实际上直到现在才设置,所以如果在触发rails服务器命令时传递了-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

for environment选项请参阅: 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被执行之前。

希望这有帮助。