django - 将 JSON 文件内容加载到 Heroku 环境变量

标签 django heroku environment-variables google-authentication google-speech-api

我在 Django 网络应用程序中使用 Google Speech API。我已经为其设置了一个服务帐户,并且能够在本地进行 API 调用。我已将本地 GOOGLE_APPLICATION_CREDENTIALS 环境变量指向包含所有凭据的服务帐户的 json 文件。

这是我的服务帐户的 json 文件的快照: enter image description here

我尝试通过运行设置heroku的GOOGLE_APPLICATION_CREDENTIALS环境变量

$ heroku config:set GOOGLE_APPLICATION_CREDENTIALS="$(< myProjCreds.json)"

$ heroku config
GOOGLE_APPLICATION_CREDENTIALS: {

^^ 它在 json 文件中第一次出现 " 时终止,紧接在 { 之后 和

$ heroku config:set GOOGLE_APPLICATION_CREDENTIALS='$(< myProjCreds.json)'

$ heroku config
GOOGLE_APPLICATION_CREDENTIALS: $(< myProjCreds.json)

^^ 命令被保存到环境变量中

我尝试将heroku的GOOGLE_APPLICATION_CREDENTIALS环境变量设置为服务帐户的json文件的内容,但它不起作用(因为显然这个变量的值需要是json的绝对路径文件) 。我找到了一种无需加载 json 帐户即可授权开发者帐户的方法,而是使用 GOOGLE_ACCOUNT_TYPEGOOGLE_CLIENT_EMAILGOOGLE_PRIVATE_KEYHere是它的 GitHub 讨论页面。

我想要为我的 Django Web 应用程序提供类似(或不同)的内容,并且出于安全原因,我希望避免将 json 文件上传到我的 Django Web 应用程序的目录(如果可能)。

最佳答案

根据您使用哪个库与 Speech API 通信,您可以使用多种方法:

  1. 您可以使用 base64 或类似的方式序列化 JSON 数据,并将结果字符串设置为一个环境变量。在应用程序启动期间,您可以解码此数据并适当配置您的客户端库。

  2. 您可以将凭证文件中的每一对设置为单独的环境变量并相应地使用它们。也许您正在使用的库支持使用 GOOGLE_ACCOUNT_TYPEGOOGLE_CLIENT_EMAILGOOGLE_PRIVATE_KEY 进行身份验证,类似于您链接到的 ruby​​ 客户端。

编辑: 假设您使用的是google官方客户端库,您有多种选项来验证您的请求,包括您正在使用的(服务帐户):https://googlecloudplatform.github.io/google-cloud-python/latest/core/auth.html您可以将凭据保存到临时文件并将其路径传递给客户端对象 https://google-auth.readthedocs.io/en/latest/user-guide.html#service-account-private-key-files (但在我看来,这是一个非常hacky的解决方法)。您还可以使用其他几个身份验证选项。

编辑2: 我发现了另一个具有更强大方法的链接 http://codrspace.com/gargath/using-google-auth-apis-on-heroku/ 。有 ruby​​ 代码,但您肯定可以在 Python 中执行类似的操作。

关于django - 将 JSON 文件内容加载到 Heroku 环境变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48855006/

相关文章:

php - 部署到 Heroku 时如何保留 session ?

python - 如何在 Django 中进行复杂的包含查询?

mysql - Django - 未在 Docker 中创建 Mysql 数据库

django - 如何在 Django 中写一些有 mustache 的东西

sqlite - 将 heroku postgres 数据库复制到本地 sqlite 数据库

environment-variables - 如何在 MPI 作业中的计算节点上设置环境变量

EC2 ubuntu 静态文件问题上的 Django 应用程序

docker - 使用 docker 镜像在 Heroku 上部署 Go App + Vue.js

python - 将 Python 标准库中的模块安装到本地目录的标准方法是什么?

python - 在 Python 中使用子进程复制 os.system 功能?