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'
我在配置目录中创建了一个 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'