【问题标题】:How do you manage secret keys and heroku with Ruby on Rails 4.1.0beta1?您如何使用 Ruby on Rails 4.1.0beta1 管理密钥和 heroku?
【发布时间】:2014-02-27 23:00:00
【问题描述】:

随着 secrets.yml 文件的发布,我消除了对 Figaro 的依赖,并将所有密钥移至 secrets.yml 并将该文件添加到 .gitignore。

但是当我尝试推送到 Heroku 时,Heroku 说他们需要我的仓库中的那个文件来部署网站。这是有道理的,但如果可以避免的话,我不希望我的密钥在 git 中。

使用 Figaro,我会运行一个 rake 任务,将密钥部署到 heroku 作为环境变量,并将 application.yml 保存在 .gitignore 中。显然,我不能再这样做了。那么我该如何处理呢?

【问题讨论】:

    标签: ruby-on-rails heroku


    【解决方案1】:

    Secrets 不是环境变量问题的完整解决方案,也不是Figaro 之类的直接替代品。将 Secrets 视为您现在应该在您的应用程序和更广泛的环境变量世界之间使用的额外接口。这就是为什么你现在应该使用Rails.application.secrets.your_variable 而不是ENV["your_variable"] 来调用变量。

    secrets.yml 文件本身就是那个接口,它并不意味着包含 实际 秘密(它的名字不好)。您可以看到这一点,因为即使在文档中的示例中,Secrets 也会为任何敏感值(例如 SECRET_KEY_BASE 值)导入环境变量,并且会自动将其签入源代码管理。

    因此,与其试图将 Secrets 破解为某种全流程环境变量管理解决方案,不如顺其自然:

    1. secrets.yml 中提取任何敏感信息。
    2. secrets.yml 签入源代码控制,就像他们默认的那样。
    3. 对于所有敏感值,将它们从普通环境变量导入机密 ERB(例如some_var: <%= ENV["some_var"] %>
    4. 像往常一样管理这些 ENV 变量,例如使用 Figaro gem。
    5. 像往常一样将 ENV 变量发送到 Heroku,例如使用 Figaro gem 的 rake 任务。

    关键是,你如何管理你的 ENV 变量并不重要——无论是手动的、使用 Figaro 的、.env 文件,等等...secrets.yml 只是一个将这些 ENV 变量转换为你的 Rails 应用程序。

    虽然它增加了一个额外的抽象步骤和一些额外的工作,但使用这种接口方法还是有好处的。

    无论您是否认为使用 Secrets 在概念上是个好主意,只要顺其自然就可以省去很多麻烦。

    PS。如果您确实选择破解它,请小心使用 heroku_secrets gem。在撰写本文时,它在启动序列中作为 before_initialize 运行,因此您的 ENV 变量将不可用于您的 config/environments/ 目录中的任何配置文件(您通常会将它们放置在诸如 Amazon S3 密钥之类的位置) .

    【讨论】:

    • 我想要一种方法来获取机密,只是将敏感密钥指向生产并保留它以供开发,但即使没有生产密钥,也应该可以在不同的 Heroku 环境中工作,而不是在回购中公开
    【解决方案2】:

    该 Figaro 任务的 secrets.yml 等效项由 heroku_secrets gem 提供,来自https://github.com/alexpeattie/heroku_secrets

    gem 'heroku_secrets', github: 'alexpeattie/heroku_secrets'
    

    这可以让你运行

    rake heroku:secrets RAILS_ENV=production
    

    将secrets.yml 的内容作为环境变量提供给heroku。

    【讨论】:

    • 如果您将 secrets.yml 的内容提供给 heroku,那么您是否也将它们保存在 secrets.yml 文件中?您是否将 secrets.yml 上传到 github?如果您使用该 gem,该 gem 是否处理隐藏 secrets.yml 文件以防止在 github 上公开?
    • 您没有在您的存储库(heroku 或 github)中提供 secrets.yml。 Secrets.yml 被添加到您的 .gitignore 文件中,这意味着它没有被添加到版本控制 (git) 中。 Secretes.yml 仅“存在”在您的本地机器/开发环境中。
    【解决方案3】:

    see this link 用于 Heroku 设置

    如果你想像这样在本地使用上运行

    KEY=xyz OTHER_KEY=123 轨 s

    【讨论】:

      猜你喜欢
      • 2011-06-24
      • 1970-01-01
      • 1970-01-01
      • 2016-05-12
      • 2011-06-22
      • 1970-01-01
      • 2016-03-08
      • 2014-07-29
      • 2010-10-25
      相关资源
      最近更新 更多