繁体   English   中英

如何使用Ruby on Rails 4.1.0beta1管理秘密密钥和heroku?

[英]How do you manage secret keys and heroku with Ruby on Rails 4.1.0beta1?

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

但是当我尝试推送到Heroku时,Heroku表示他们需要在我的存储库中使用该文件才能部署网站。 这是有道理的,但是如果可以避免的话,我不想在git中输入密钥。

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

秘密不是解决环境变量问题的完整方法,也不是像Figaro这样的东西的直接替代品。 将“秘密”视为您现在应在应用程序和更广泛的环境变量之间使用的额外接口。 这就是为什么现在应该使用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瓦尔-无论是手动,使用费加罗,一个.env文件,无论... secrets.yml仅仅是翻译这些ENV瓦尔到您的Rails应用程序的接口。

尽管它增加了抽象的额外步骤和一些额外的工作,但使用此接口方法还是有优势的。

无论您认为使用Secrets在概念上是一个好主意,还是随心所欲地使用它都会为您省去很多麻烦。

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

那个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。

查看此链接了解heroku设置

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

KEY = xyz OTHER_KEY = 123 rails

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM