我为我的应用程序创建了一些不同的“环境”,这些环境托管在heroku上,所以我有:appName-staging.heroku.com appName-production.heroku.com
我想为这些应用程序使用不同的谷歌API密钥,我该怎么做?我创建了一个google.yml文件,如下所示:
开发:api_key:'ABCXYZ'
制作:api_key:'DEFXYZ'
所以我在本地开发时使用ABCSZY,而对于appName-production.heroku.com问题则使用DEFXYZ,如何让appName-staging.heroku.com使用不同的密钥?
由于部署到Heroku的每个应用程序都被认为是“ 生产环境 ”,appName-staging.heroku.com和appName-production.heroku.com都使用相同的密钥 .
2 回答
以前的答案肯定有效,但没有说明检查包含私钥到源控件的文件所带来的潜在安全威胁 . 在源代码管理中使用google.yml文件将允许任何有权访问您的repo的人查看您的私有API密钥 .
更安全的解决方案是删除google.yml文件,并使用相同的密钥在登台和 生产环境 服务器上创建不同的环境变量:
然后,当需要时,您可以在代码中通过它来引用它
这将允许您共享代码而无需共享您的私有API密钥 .
有关在Heroku上使用环境变量的更多信息,请访问https://devcenter.heroku.com/articles/config-vars
您可以为每个环境添加heroku config variable,允许您从应用程序中识别每个环境 .
有点像:
然后,您可以使用以下方法从应用内获取当前环境:
如果您将YAML文件作为类似于
GOOGLE_KEYS
的哈希值,则以下内容将返回给定环境的正确密钥: