【发布时间】: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