【发布时间】:2015-03-26 22:10:17
【问题描述】:
这种行为真的让我很困惑。我的ENV 的内容或我的配置似乎缓存在某处。以下是如何重现它:
在一个新的应用程序中(我使用的是 Ruby 2.0.0 和 Rails 4.2.1),编辑 application.rb:
$ cat config/application.rb
require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require(*Rails.groups)
module Myapp
class Application < Rails::Application
config.active_record.raise_in_transactional_callbacks = true
config.env_foo = ENV['FOO']
end
end
配置项env_foo现在是nil:
$ unset FOO # make sure FOO is unset
$ rails console
Loading development environment (Rails 4.2.1)
2.0.0-p598 :001 > Rails.application.config.env_foo
=> nil
设置一些环境变量,看看会发生什么:
$ export FOO=barbapapa
$ rails console
Loading development environment (Rails 4.2.1)
2.0.0-p598 :001 > Rails.application.config.env_foo
=> nil
2.0.0-p598 :002 > ENV['FOO']
=> "barbapapa"
所以缓存项仍然是nil,但ENV 已更改。即使我将环境更改为生产环境:
$ RAILS_ENV=production rails console
Loading production environment (Rails 4.2.1)
2.0.0-p598 :001 > Rails.application.config.env_foo
=> nil
此配置缓存在哪里以及如何使其反映新的ENV?
注意:我知道还有其他配置 Rails 的方法,但我使用的是 Heroku,所以我认为鼓励使用环境进行配置。
【问题讨论】:
标签: ruby ruby-on-rails-4 environment-variables