为什么我的Rails初始化程序在控制台中缓存ENV变量(Foreman,Dev env)
从小烦恼开始的事情现在变成了头痛。我正在构建一个Rails 4应用程序,并使用Foreman为我的开发人员设置了Procfile和.env文件以进行配置。当我在.env文件中设置一个ENV变量时,它会被我的应用程序正确拾取。在这种情况下,我为初始化器中的Paperclip设置了一些ENV选项。为什么我的Rails初始化程序在控制台中缓存ENV变量(Foreman,Dev env)
当我去改变ENV变量的值时,问题出现了。在控制台中,如果我键入ENV [“MY_VAR”],它将显示新值。但是,我的初始化程序中使用的值(大概是在启动控制台时运行的)显示了旧值!我的项目中没有任何地方是任何地方列出的旧值。这导致我相信环境正在被缓存,或者env变量被导出到我的shell。我没有足够的空间去寻找,所以我们将不胜感激!我正在使用Ruby 1.9.3-p374和Rails 4.1.0在Mac(10.9.4)上开发。
实施例:
ROOT/.ENV
S3_BUCKET=mybucket
配置/初始化/ paperclip.rb
Paperclip::Attachment.default_options[:s3_credentials] = {bucket: ENV["S3_BUCKET"]}
如果更改S3_BUCKET的值设定为 “newbucket” 和运行“工头运行轨道c“或”轨道c“进入控制台,这是发生了什么情况:
ENV["S3_BUCKET"] # => "newbucket"
Paperclip::Attachment.default_options[:s3_credentials] # => {bucket: 'mybucket'}
我应该提到,这种行为也发生在我放在/ lib中的类中。我想这是因为我忽略了一些愚蠢的东西。有任何想法吗?
如果您使用Rails的4开箱即用,它带有一个名为Spring的宝石,是打算通过在后台预加载应用程序的一个实例,并重新加载它作为你的代码和配置,使您的生活更轻松文件改变。
但是,Spring只监视Rails的默认配置文件,因此您需要配置Spring来监视其他任何您希望触发重新加载的文件。
对于自定义设置,弹簧读数为~/.spring.rb
和config/spring.rb
。您可以添加以下行添加到您选择的文件看你.env
文件更改:
Spring.watch '.env'
见Spring's configuration documentation在README以获得更多信息。
如果你改变你的环境变量,并希望你的应用程序来提取它们,你必须重新启动应用程序。这一直是这种情况。 – nzifnab 2014-09-19 16:57:27
当然可以。然而,为了澄清,在重新启动应用程序之后,这些更改不会在初始化程序中找到,但它们会在ENV哈希中拾取。 – Spencer 2014-09-19 17:23:11
你是否在使用'spring'? (检查你的Gemfile。) – fny 2014-09-19 18:07:08