[英]How do you manage Ruby on Rails migrations with a team of developers?
[英]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入侵某种全流环境变量管理解决方案,不如顺其自然:
secrets.yml
取出所有敏感内容。 secrets.yml
检入源代码管理。 some_var: <%= ENV["some_var"] %>
) 问题的关键是,这不要紧,你如何管理你的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。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.