Rails 4.1 环境变量不重载

Rails 4.1 environment variables not reloading

我在配置目录中创建了一个 application.yml 文件并添加了一些键值对(即 AWS_REGION: us-east-1)。我还将以下内容添加到 application.rb 以读取文件并更新 ENV 哈希:

if Rails.env.development?  
  config.before_configuration do
    env_file = File.join(Rails.root, 'config', 'application.yml')
    YAML.load(File.open(env_file)).each do |key, value|
      ENV[key.to_s] = value
    end if File.exists?(env_file)
  end
end

然后,如果我 运行 rails c 我可以看到我在 application.yml 文件中设置的 ENV 变量(即 ENV['AWS_REGION'])。但是,如果我更新任何值,甚至向文件添加新的键值对,下次我 运行 rails c 时,值不会更新,新键也不会可用。

我尝试重新启动终端,但没有成功。有什么建议吗?

问题似乎是 spring 在启动时缓存了应用程序的状态 - 它不知道对 config/application.yml 的更改应该导致重新加载应用程序

您可以通过创建 config/spring.rb 来自定义 spring 观看和重新加载您的应用程序的方式 - 它看起来像添加类似

的东西
Spring.watch "config/application.yml"

就是你想要的

Gemfile

中删除 gem 'spring'