【问题标题】:Does ENV['RAILS_ENV'] and ENV['RACK_ENV'] need to be set in staging and production?ENV['RAILS_ENV'] 和 ENV['RACK_ENV'] 是否需要在登台和生产中设置?
【发布时间】:2015-08-22 01:04:05
【问题描述】:

ENV['RAILS_ENV']ENV['RACK_ENV'] 正在开发中。返回development。在登台或生产中,它返回nil。我们是否应该为暂存环境和生产环境显式设置这两个环境变量?

Rails 是否希望这样设置?

我还注意到以下内容。我有这个初始化程序:config/initializers/01_redis.rb:

redis_connection = Redis.new(host: URI.parse(ENV['REDIS_SERVER_URL']).host, port: URI.parse(ENV['REDIS_SERVER_URL']).port)
$redis           = Redis::Namespace.new(Rails.env.to_sym, redis: redis_connection)

在暂存中检查此文件时。 Rails.env.to_sym 被解释为:development。此外,在 Rails 控制台中运行 Rails.env,在暂存时返回 staging。在初始化 Rails 应用程序之前,Rails 可能需要 ENV['RAILS_ENV']ENV['RACK_ENV']

你有什么想法?

【问题讨论】:

  • 如果您使用的是linux,您可以运行env cmd 并检查它是否已定义?正在开发中。
  • @Nithin 在 OSX 中,运行 env | grep ENV 什么都不返回
  • 不知道OSX 你必须试试env | grep RAILS_ENV。在 ubuntu 中,.bashrc 是我用来设置环境变量的地方。您可能希望在登台服务器上进行此修复。
  • 同样的结果。顺便说一句,grep ENVENV 匹配。这意味着,如果在env 中定义了RAILS_ENV,它就会显示出来。那么这是否意味着我需要显式设置这两个 ENV 变量以用于暂存和生产?
  • 哦,我错过了,是的,你是对的......

标签: ruby-on-rails ruby-on-rails-4


【解决方案1】:

Rails 需要知道它在什么环境中运行。具体部分代码见https://github.com/rails/rails/blob/master/railties/lib/rails.rb#L69

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

如果你想在生产模式下工作,是的,你应该设置那个环境变量。

但是,有些服务器会为您设置变量。例如,Apache Passenger,默认为生产环境并确实如此。

https://www.phusionpassenger.com/library/config/apache/reference/#passengerappenv

【讨论】:

    猜你喜欢
    • 2015-08-19
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 2014-06-21
    • 1970-01-01
    相关资源
    最近更新 更多