【发布时间】:2016-06-17 18:34:19
【问题描述】:
我的 config/application.rb 中有以下代码来加载一些自定义本地环境变量
require File.expand_path('../boot', __FILE__)
require 'rails/all'
# Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups)
module App
...
config.before_configuration do
env_file = File.join(Rails.root, 'config', 'local_env.yml')
YAML.load(File.open(env_file)).each do |key, value|
ENV[key.to_s] = value
end if File.exists?(env_file)
end
end
end
我正在尝试将它与 railsconfig gem 一起使用,因此我可以通过引用 ENV 哈希在 settings.yml 中获取敏感信息。 我的 settings.yml 如下所示:
default_request_ttl: 5
default_request_shared_key_size: 32
default_request_tunnel_provider: "SoftEther"
providers:
soft_ether:
server: <%= ENV["RSRS.PROVIDERS.SOFT_ETHER.SERVER"] %>
port: "443"
admin_hub_password: <%= ENV["RSRS.PROVIDERS.SOFT_ETHER.PASSWORD"] %>
vpncmd_path: "/usr/local/bin/vpncmd"
问题是settings.yml似乎在设置环境变量之前就被解析了。这样,如果我运行 rails 控制台并调用 Settings 哈希,这就是我得到的:
jruby-9.0.5.0 :007 > Settings
=> #<Config::Options default_request_ttl=5, default_request_shared_key_size=32, default_request_tunnel_provider="SoftEther", providers=#<Config::Options soft_ether=#<Config::Options server=nil, port="443", vpncmd_path="/usr/local/bin/vpncmd">>>
但是在 Settings.reload 之后!变量设置正确:
jruby-9.0.5.0 :002 > Settings.reload!
=> #<Config::Options default_request_ttl=5, default_request_shared_key_size=32, default_request_tunnel_provider="SoftEther", providers=#<Config::Options soft_ether=#<Config::Options server="*.*.*.*", port="443", admin_hub_password="***************", vpncmd_path="/usr/local/bin/vpncmd">>>
我已经尝试将 local_env 加载代码放在 config/environment.rb 中,但结果是一样的。有人知道发生了什么吗?
提前致谢,
【问题讨论】:
标签: ruby-on-rails ruby jruby