使用Figaro和Secrets.yml管理Env变量

Que*_*fer 3 ruby-on-rails environment-variables ruby-on-rails-4 figaro-ruby

我有一个rails 4.1应用程序,我正在尝试组织我的env变量.截至目前,我的config /文件夹中有一个secrets.yml文件.我还安装了figaro宝石.我的目标是将所有我的env变量放在application.yml(未检入git)文件中,然后使用secrets.yml(签入git)文件将变量从appliation.yml映射到应用程序.当我使用Rails.application.secrets打印文件时它只显示如下所示的哈希:

:salesforce_username=>"ENV['SALESFORCE_USERNAME']"
Run Code Online (Sandbox Code Playgroud)

我的所有外部服务都没有使用此env变量设置.当我查看跟踪时,实际的ENV ['ACCOUNT_ID']正在请求中传递,如下所示:

v2/accounts/ENV['ACCOUNT_ID']/envelopes
Run Code Online (Sandbox Code Playgroud)

另外,我无法在我的应用程序中使用Rails.application.secrets.account_id访问我的env变量.

secrets.yml

development:
  account_id: <%= ENV['ACCOUNT_ID'] %>
Run Code Online (Sandbox Code Playgroud)

aplication.yml

development:
  ACCOUNT_ID: "123456"
Run Code Online (Sandbox Code Playgroud)

application.rb中

# preload tokens in application.yml to local ENV
config = YAML.load(File.read(File.expand_path('../application.yml', __FILE__)))
config.merge! config.fetch(Rails.env, {})
config.each do |key, value|
  ENV[key] = value.to_s unless value.kind_of? Hash
end
Run Code Online (Sandbox Code Playgroud)

Jér*_*ice 11

宝石提供了一个发电机:

$ rails generate figaro:install
Run Code Online (Sandbox Code Playgroud)

生成器创建config/application.yml文件并修改.gitignore文件以防止将文件签入git存储库.

您可以将环境变量作为键/值对添加到config/application.yml:

GMAIL_USERNAME: Your_Username
Run Code Online (Sandbox Code Playgroud)

环境变量将作为ENV变量在应用程序的任何位置可用:

ENV["GMAIL_USERNAME"]
Run Code Online (Sandbox Code Playgroud)

这使您可以方便地在代码中使用相同的变量,无论它们是由Unix shell还是figaro gem的config/application.yml设置的.在变量配置/ application.yml文件将覆盖在Unix外壳设置环境变量.

在ENV变量可能不合适的测试或其他情况下,您可以像Figaro方法调用一样访问配置值:

Figaro.env.gmail_username
Run Code Online (Sandbox Code Playgroud)

使用此语法在开发,测试或生产环境中设置不同的凭据:

HELLO: world
development:
  HELLO: developers
production:
  HELLO: users
Run Code Online (Sandbox Code Playgroud)

在这种情况下,ENV["HELLO"]将在开发中产生"开发者",在生产中产生"用户",否则产生"世界".