Rails 配置中缓存的环境变量?
Environment variables cached in Rails config?
这种行为真的让我很困惑。似乎我的 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,因此我认为鼓励使用环境进行配置。
Spring gem 在Rails 4.
的开发环境中默认预加载应用程序
要重新加载您的应用,只需终止当前项目的 spring 个进程:
spring stop
Spring 似乎无法根据环境变化进行刷新,但它确实可以监控文件。如果您使用 .env
文件,dotenv for example, you can add it to config/spring.rb
:
Spring.watch '.env'
这种行为真的让我很困惑。似乎我的 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,因此我认为鼓励使用环境进行配置。
Spring gem 在Rails 4.
的开发环境中默认预加载应用程序要重新加载您的应用,只需终止当前项目的 spring 个进程:
spring stop
Spring 似乎无法根据环境变化进行刷新,但它确实可以监控文件。如果您使用 .env
文件,dotenv for example, you can add it to config/spring.rb
:
Spring.watch '.env'