我为我的应用程序创建了一些不同的“环境”,这些环境托管在heroku上,所以我有: appName-staging.heroku.com appName-production.heroku.com
我想为这些应用程序使用不同的google api密钥,我该怎么办? 我创建了一个类似于:
的google.yml文件发展: api_key:'ABCXYZ'
生产: api_key:'DEFXYZ'
因此我在本地开发时使用ABCSZY,而使用DEFXYZ进行appName-production.heroku.com 问题是,如何让appName-staging.heroku.com使用不同的密钥?
因为部署到Heroku的每个应用程序都被认为是“生产”,两者都是 appName-staging.heroku.com和appName-production.heroku.com使用相同的密钥。
答案 0 :(得分:5)
您可以为每个环境添加heroku config variable,以便您在应用中识别每个环境。
有些事情:
$ heroku config:add APP_NAME_ENV=production --app appName-production
$ heroku config:add APP_NAME_ENV=staging --app appName-staging
然后,您可以使用以下方式从应用内获取当前环境:
ENV['APP_NAME_ENV']
如果您将YAML文件作为类似GOOGLE_KEYS
的哈希值,则以下内容将返回给定环境的正确密钥:
GOOGLE_KEYS[ENV['APP_NAME_ENV']]
答案 1 :(得分:0)
之前的答案肯定有效,但没有说明检查包含私钥到源控件的文件所带来的潜在安全威胁。在源代码管理中使用google.yml文件将允许任何有权访问您的repo的人查看您的私有API密钥。
更安全的解决方案是删除google.yml文件,并使用相同的密钥在登台服务器和生产服务器上创建不同的环境变量:
$ heroku config:add GOOGLE_API_KEY=<production key> --app appName-production
$ heroku config:add GOOGLE_API_KEY=<development key> --app appName-staging
然后,当需要时,您可以通过
在代码中引用它ENV['GOOGLE_API_KEY']
这将允许您在不共享私有API密钥的情况下共享代码。
有关在Heroku上使用环境变量的更多信息,请访问https://devcenter.heroku.com/articles/config-vars