起初的小烦恼现在变成了令人头痛的事情。我正在构建一个 Rails 4 应用程序,并使用 Foreman 进行开发设置,并使用 Procfile 和 .env 文件进行配置。当我在 .env 文件中设置 ENV 变量时,我的应用程序会正确拾取它。在本例中,我在初始化程序中为 Paperclip 设置一些 ENV 选项。
当我去更改 ENV 变量的值时,问题就出现了。在控制台中,如果我输入 ENV["MY_VAR"],它会显示新值。但是,我的初始化程序中使用的值(大概是在我启动控制台时运行的)显示了旧值!我的项目中没有任何地方列出旧值。这让我相信环境正在以某种方式被缓存,或者环境变量正在导出到我的 shell。我已经没有地方可看了,所以任何帮助将不胜感激!我正在 Mac (10.9.4) 上使用 Ruby 1.9.3-p374 和 Rails 4.1.0 进行开发。
Example:
根/.env
S3_BUCKET=mybucket
配置/初始化程序/paperclip.rb
Paperclip::Attachment.default_options[:s3_credentials] = {bucket: ENV["S3_BUCKET"]}
如果我将 S3_BUCKET 的值更改为“newbucket”并运行“foreman run Rails c”或“rails c”进入控制台,则会发生以下情况:
ENV["S3_BUCKET"] # => "newbucket"
Paperclip::Attachment.default_options[:s3_credentials] # => {bucket: 'mybucket'}
我应该提到这种行为也发生在我放入 /lib 的类中。我想这都是由于我忽略了一些愚蠢的事情造成的。有任何想法吗?
如果您开箱即用 Rails 4,它会附带一个名为的 gemSpring https://github.com/rails/spring that's intended通过在后台预加载应用程序实例并在代码和配置文件更改时重新加载它,使您的生活更轻松。
然而,Spring 仅监视 Rails 的默认配置文件,因此您需要配置 Spring 来监视您希望触发重新加载的其他任何文件。
春天读~/.spring.rb
and config/spring.rb
用于自定义设置。您可以将以下行添加到您选择的文件中以观看您的.env
更改文件:
Spring.watch '.env'
See Spring的配置文档 https://github.com/rails/spring#configuration在自述文件中了解更多信息。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)