gpt4 book ai didi

ruby - 缓存在 Rails 配置中的环境变量?

转载 作者:数据小太阳 更新时间:2023-10-29 06:41:07 26 4
gpt4 key购买 nike

这种行为真的让我很困惑。似乎我的 ENV 或我的配置的内容缓存在某处。以下是重现它的方法:

在一个新的应用程序中(我使用的是 Ruby 2.0.0 和 Rails 4.2.1),编辑 application.rb:

$ cat config/application.rb 
require File.expand_path('../boot', __FILE__)

require 'rails/all'

Bundler.require(*Rails.groups)

module Myapp
class Application < Rails::Application
config.active_record.raise_in_transactional_callbacks = true

config.env_foo = ENV['FOO']
end
end

配置项env_foo现在是nil:

$ unset FOO  # make sure FOO is unset
$ rails console
Loading development environment (Rails 4.2.1)
2.0.0-p598 :001 > Rails.application.config.env_foo
=> nil

设置一些环境变量,看看会发生什么:

$ export FOO=barbapapa
$ rails console
Loading development environment (Rails 4.2.1)
2.0.0-p598 :001 > Rails.application.config.env_foo
=> nil
2.0.0-p598 :002 > ENV['FOO']
=> "barbapapa"

所以缓存项仍然是 nilENV 已经改变了。即使我将环境更改为生产环境:

$ RAILS_ENV=production rails console
Loading production environment (Rails 4.2.1)
2.0.0-p598 :001 > Rails.application.config.env_foo
=> nil

此配置缓存在哪里?如何使其反射(reflect)新的 ENV

注意:我知道还有其他配置 Rails 的方法,但我使用的是 Heroku,所以我认为鼓励使用环境进行配置。

最佳答案

Spring在 Rails 4 的开发环境中,gem 默认预加载应用。

要重新加载您的应用程序,只需终止当前项目的 spring 进程即可:

spring stop

Spring 似乎无法根据环境变化进行刷新,但它确实可以监控文件。如果您使用的是 .env 文件,dotenv例如,您可以将其添加到 config/spring.rb :

Spring.watch '.env'

关于ruby - 缓存在 Rails 配置中的环境变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29289833/

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