在其他rails项目中,我有一个本地database.yml,在源代码库中只提交database.sample文件。在部署时,使用capistrano脚本将database.yml的共享版本符号链接到所有版本。
当部署到heroku时,使用git并且它们似乎完全覆盖database.yml并在内部执行某些操作。
这对于database.yml来说很好,但是如果我在config / s3.yml中有s3配置怎么办?我将我的项目放在github上,所以我不想提交s3.yml,每个人都可以看到我的凭据。它宁愿提交一个示例s3.sample,人们将使用自己的设置覆盖它们,并在我的工作目录中保留一个本地s3.yml文件。
处理此问题的最佳方法是什么?
答案 0 :(得分:13)
Heroku对此有一些指导 -
答案 1 :(得分:8)
将s3凭据存储在环境变量中。
$ cd myapp
$ heroku config:add S3_KEY=8N029N81 S3_SECRET=9s83109d3+583493190
Adding config vars:
S3_KEY => 8N029N81
S3_SECRET => 9s83109d3+583493190
Restarting app...done.
在你的应用中:
AWS::S3::Base.establish_connection!(
:access_key_id => ENV['S3_KEY'],
:secret_access_key => ENV['S3_SECRET']
)
参见解释开发设置等的Heroku Config Vars documentation。
答案 2 :(得分:8)
另一种解决方案是创建一个新的本地分支,您可以在其中修改.gitignore,以便 secret-file 可以推送到heroku。 DON' T 将此分支推送到您的Github回购。
要将非主分支推送到heroku,请使用:
git push heroku secret-branch:master
更多信息可在以下网址找到:
https://devcenter.heroku.com/articles/multiple-environments#advanced-linking-local-branches-to-remote-apps
使用heroku run bash
然后ls
检查您的秘密文件是否已被推送到heroku
答案 3 :(得分:6)
如果使用Rails 4.1 beta,请从https://github.com/alexpeattie/heroku_secrets尝试heroku_secrets gem:
gem 'heroku_secrets', github: 'alexpeattie/heroku_secrets'
这使您可以在Rails 4.1的 config / secrets.yml (未在源代码管理中签入)中存储密钥,然后运行
rake heroku:secrets RAILS_ENV=production
使其内容可用于heroku(根据heroku最佳实践文档,它解析您的secrets.yml文件并将其中的所有内容作为环境变量推送到heroku)。
答案 4 :(得分:2)
您还可以查看 Figaro gem。
答案 5 :(得分:0)
使用Heroku + Build&Deploy-time Secrets查看此内容。似乎这不是Heroku支持的。这意味着对于Rails应用程序,除了提交BUNDLE_GITHUB__COM例如只能从私有存储库中获取其他信息。
我会试着看看是否有办法在将其捆绑到heroku之前让CI捆绑包私人部门