如何使用Ruby on Rails 4.1.0beta1管理密钥和heroku?
随着secrets.yml文件的发布,我删除了对Figaro的依赖并将我的所有密钥移到secrets.yml并将该文件添加到.gitignore。
但当我试图推送到Heroku时,Heroku说他们需要我的仓库中的那个文件来部署网站。 这是有道理的,但如果我可以避免它,我不希望我的密钥在git中。
使用Figaro,我会运行一个rake任务来将密钥部署到heroku作为env变量,并将application.yml保存在.gitignore中。 显然,我不能再那样做了。 那我该怎么处理呢?
请参阅此链接以了解heroku设置
如果你想像这样在本地使用
KEY = xyz OTHER_KEY = 123 rails s
秘密不是环境变量问题的完整解决方案,它不是像费加罗这样的直接替代品。 将Secrets视为一个额外的界面,您现在应该在您的应用程序和更广泛的环境变量世界之间使用。 这就是为什么你现在应该通过使用Rails.application.secrets.your_variable
而不是ENV["your_variable"]
来调用变量。
secrets.yml
文件本身就是那个接口,它并不意味着包含实际的秘密(它没有很好地命名)。 您可以看到这一点,因为即使在文档的示例中,Secrets也会为任何敏感值(例如SECRET_KEY_BASE
值)导入环境变量,并自动将其检入源代码管理中。
因此,不要试图将Secrets破解成某种全流程环境变量管理解决方案,而是顺其自然:
- 把任何敏感的东西从
secrets.yml
拉出来。 - 将
secrets.yml
检查到源代码管理中,就像他们默认你一样。 - 对于所有敏感值,将它们从正常环境变量导入到秘密ERB中(例如
some_var: <%= ENV["some_var"] %>
) - 像往常一样管理那些ENV变量,例如使用Figaro gem。
- 像往常一样将ENV变量发送到Heroku,例如使用Figaro gem的rake任务。
关键是,无论你如何管理你的ENV变量 – 无论是手动,使用Figaro, .env
文件,无论如何…… .env
只是一个将这些ENV变量转换为你的Rails应用程序的界面。
虽然它增加了额外的抽象步骤和一些额外的工作,但使用这种接口方法有一些优势。
无论你是否相信它在概念上是一个好主意或不使用秘密,它将为你节省很多头痛,只需顺其自然。
PS。 如果您确实选择破解它,请小心heroku_secrets
gem。 在撰写本文时,它在启动序列中作为before_initialize
运行,因此您的ENV变量将无法用于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
使secretoku.yml的内容可用作heroku作为环境变量。
- 为什么有些JS行为在开发中有效,但是当我推送到Heroku时却没有?
- ExecJS :: RuntimeError:SyntaxError:意外的标记:operator(>)(行:22342,col:24,pos:826182)
- 试图通过heroku上的bootstrap-sass导入bootstrap但是收到错误
- 在Heroku的Sinatra应用程序中,会话不是跨越Dynos共享的
- 通过纱线安装bootstrap的Rails无法找到字体
- Heroku Force Clear Varnish Cache
- `fetch’:找不到键:“S3_BUCKET_NAME”(KeyError)with paperclip / aws s3 / rails
- 将Rails应用程序部署到Heroku时“无法加载此类文件”错误
- Heroku:在日志中查看params和sql活动?