如何使用秘密yaml配置文件部署heroku应用程序而不提交文件?

时间:2011-10-26 20:41:14

标签: deployment heroku yaml config

在其他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文件。

处理此问题的最佳方法是什么?

6 个答案:

答案 0 :(得分:13)

Heroku对此有一些指导 -

http://devcenter.heroku.com/articles/config-vars

答案 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捆绑包私人部门