【问题标题】:Using Figaro and Secrets.yml to Manage Env Variables使用 Figaro 和 Secrets.yml 管理环境变量
【发布时间】:2015-07-09 00:14:20
【问题描述】:

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

:salesforce_username=>"ENV['SALESFORCE_USERNAME']"

我的所有外部服务都没有使用这个环境变量设置。当我查看跟踪时,实际上 ENV['ACCOUNT_ID'] 正在像这样的请求中传递:

v2/accounts/ENV['ACCOUNT_ID']/envelopes

此外,我无法在我的应用程序中使用 Rails.application.secrets.account_id 访问我的环境变量。

secrets.yml

development:
  account_id: <%= ENV['ACCOUNT_ID'] %>

aplication.yml

development:
  ACCOUNT_ID: "123456"

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

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-4 environment-variables figaro-ruby


    【解决方案1】:

    gem 提供了一个生成器:

    $ rails generate figaro:install
    

    生成器创建一个 config/application.yml 文件并修改 .gitignore 文件以防止该文件被检入 git 存储库。

    您可以将环境变量作为 key/value 对添加到 config/application.yml

    GMAIL_USERNAME: Your_Username
    

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

    ENV["GMAIL_USERNAME"]
    

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

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

    Figaro.env.gmail_username
    

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

    HELLO: world
    development:
      HELLO: developers
    production:
      HELLO: users
    

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

    【讨论】:

    • rails generate figaro:install 在我的安装中找不到。我将 gem figaro, '1.1.1' 放入我的 gemfile,运行 bundle install 并且生成器不存在。
    【解决方案2】:

    您说 ENV 变量正在“在请求中传递”,但是当我查看您的代码 sn-ps 时,我认为这些变量一开始就没有被检测到。

    如果您想将变量注入字符串,请仔细检查您是否使用以下格式,尤其是#{}

    important_string = "v2/accounts/#{ENV['ACCOUNT_ID']}/envelopes"
    

    一般来说,如果您不确定在给定环境中设置了哪些环境变量,仔细检查的最简单方法是打开 Rails 控制台并查询 ENV,如下所示:

    $ rails console
    > puts ENV.keys # find out what ENV vars are set
    => (returns a long list of var names)
    > puts ENV['DEVISE_PEPPER']
    => "067d793e8781fa02aebd36e239c7878bdc1403d6bcb7c380beac53189ff6366be"
    

    【讨论】:

    • 对不起,这个答案没有帮助!关于我可以做些什么以在未来做出更有用的答案的任何反馈?
    • 我发现它对访问我的环境密钥很有用。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-27
    • 2015-08-05
    • 1970-01-01
    • 1970-01-01
    • 2019-01-15
    • 2014-04-03
    • 1970-01-01
    相关资源
    最近更新 更多