【问题标题】:Why are my Rails initializers caching ENV variables in the console (Foreman, Dev env)为什么我的 Rails 初始化程序在控制台中缓存 ENV 变量(Foreman,Dev env)
【发布时间】:2014-11-14 08:08:48
【问题描述】:

一开始的小烦恼现在变成了头痛。我正在构建一个 Rails 4 应用程序,并使用 Foreman 进行开发设置,并使用 Procfile 和 .env 文件进行配置。当我在 .env 文件中设置 ENV 变量时,它会被我的应用程序正确拾取。在这种情况下,我在初始化程序中为 Paperclip 设置了一些 ENV 选项。

当我更改 ENV 变量的值时,问题就出现了。在控制台中,如果我输入 ENV["MY_VAR"],它会显示新值。但是,我的初始化程序中使用的值(大概是在我启动控制台时运行的)显示了旧值!在我的项目中,任何地方都没有列出旧值。这让我相信环境正在以某种方式被缓存,或者环境变量正在被导出到我的 shell。我没有地方可以看,所以任何帮助将不胜感激!我正在使用 Ruby 1.9.3-p374 和 Rails 4.1.0 的 Mac (10.9.4) 上开发。

例子:

ROOT/.env

S3_BUCKET=mybucket

config/initializers/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 中的类中。我想这都是由于我忽略了一些愚蠢的事情。有什么想法吗?

【问题讨论】:

  • 如果您更改了您的环境变量并希望您的应用程序获取它们,您必须重新启动应用程序。一直都是这样。
  • 是的,当然。澄清一下,在重新启动应用程序后,这些更改不会在初始化程序中被拾取,而是在 ENV 哈希中被拾取。
  • 你在使用spring吗? (检查您的 Gemfile。)
  • 啊,是的,可能。我以前没有使用过它,所以我不确定你如何打开/关闭或配置它。但是它在我的 gemfile 中(在我创建应用程序时添加)并且有一个 bin/spring 文件。它是默认开启的吗?如果是这样,我如何强制它重新加载?我也刚刚注意到重新启动计算机会重置它。

标签: ruby-on-rails environment-variables development-environment foreman


【解决方案1】:

如果您使用的是开箱即​​用的 Rails 4,它会附带一个名为 Spring 的 gem,旨在通过在后台预加载应用程序实例并重新加载来让您的生活更轻松它随着您的代码和配置文件的变化而变化。

然而,Spring 仅监控 Rails 的默认配置文件,因此您需要配置 Spring 以监控您希望触发重新加载的任何其他文件。

Spring 读取 ~/.spring.rbconfig/spring.rb 以进行自定义设置。您可以将以下行添加到您选择的文件中,以查看您的 .env 文件是否有更改:

Spring.watch '.env'

有关更多信息,请参阅自述文件中的 Spring's configuration documentation

【讨论】:

  • 太棒了,谢谢!看起来我应该更仔细地阅读升级说明:-)。
  • OMFG... 我想知道为什么即使我删除了 flipp'n 文件,重新启动控制台也无法获取更改!我不得不完全关闭终端。非常感谢你!绝对令人抓狂。
  • 据我所知,即使使用此修复程序也不会重新加载配置/初始化程序。见这里:github.com/rails/spring/issues/378
  • 谢谢!我终于让 Figaro gem 再次工作了。刚刚添加Spring.watch 'config/application.yml'
  • 最好检查一下 spring 是否已加载,因为它通常只用于 din 开发Spring.watch('config/application.yml') if defined? Spring
猜你喜欢
  • 1970-01-01
  • 2014-09-20
  • 2021-12-22
  • 2011-05-26
  • 2013-06-08
  • 2022-01-13
  • 2013-09-04
  • 2013-10-27
  • 1970-01-01
相关资源
最近更新 更多