gpt4 book ai didi

ruby-on-rails - 为什么我的Rails初始化程序在控制台中缓存ENV变量(工头,开发环境)

转载 作者:行者123 更新时间:2023-12-04 04:12:43 24 4
gpt4 key购买 nike

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

当我去更改ENV变量的值时,问题浮出水面。在控制台中,如果键入ENV [“MY_VAR”],它将显示新值。但是,初始化器中使用的值(大概是在启动控制台时运行的)显示了旧值!在我的项目中,没有任何地方列出旧值。这使我相信该环境正在以某种方式进行缓存,或者已将env变量导出到了我的shell中。我的地方不多了,因此任何帮助将不胜感激!我正在使用Ruby 1.9.3-p374和Rails 4.1.0在Mac(10.9.4)上进行开发。

例子:

根目录/.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中放置的类中也会发生这种行为。我想这都是由于我忽略了一些愚蠢的事情。有任何想法吗?

最佳答案

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

但是,Spring仅监视Rails的默认配置文件,因此您需要将Spring配置为监视希望触发重新加载的其他文件。

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

Spring.watch '.env'

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

关于ruby-on-rails - 为什么我的Rails初始化程序在控制台中缓存ENV变量(工头,开发环境),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25938847/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com