You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将Google Speech API服务账号JSON加载至Heroku环境变量的问题

解决Heroku设置Google服务账号JSON环境变量的问题

这个问题我之前帮好几个开发者踩过坑——当你直接把带双引号的JSON内容丢进Heroku的config:set命令时,shell会把第一个双引号当成参数的结束标记,直接截断你的JSON,导致设置失败。给你几个简单靠谱的解决方案:

方案1:通过文件内容直接导入(最省心)

不用手动转义任何引号,直接让Heroku读取本地的JSON文件内容:

heroku config:set GOOGLE_APPLICATION_CREDENTIALS="$(cat /path/to/your/service-account.json)"

这个命令会把JSON文件的所有内容作为一个完整的字符串传递给环境变量,完美避开引号解析的问题。

方案2:手动转义JSON里的双引号

如果不想用文件导入,你可以把JSON里的每一个双引号"都换成\",然后用单引号包裹整个JSON字符串:

heroku config:set GOOGLE_APPLICATION_CREDENTIALS='{"type": "service_account", "project_id": "your-project", ...}'

注意要确保整个JSON都被单引号包裹,而且所有内部的双引号都转义了——不过这个方法容易出错,尤其是JSON内容较长的时候,不如方案1方便。

关键:Django代码里的适配

因为本地你是用环境变量指向文件路径,但Heroku上环境变量存的是JSON内容,所以代码里要做一点兼容处理,避免读取失败:

import json
import os
from google.oauth2 import service_account

def get_google_credentials():
    creds_value = os.environ.get("GOOGLE_APPLICATION_CREDENTIALS")
    
    # 判断是本地的文件路径还是Heroku上的JSON内容
    if os.path.isfile(creds_value):
        # 本地环境:从文件加载凭证
        credentials = service_account.Credentials.from_service_account_file(creds_value)
    else:
        # Heroku环境:从JSON字符串加载凭证
        credentials = service_account.Credentials.from_service_account_info(json.loads(creds_value))
    
    return credentials

之后在调用Google Speech API的时候,用这个函数获取凭证即可。

验证设置是否成功

设置完后可以用下面的命令检查环境变量是否完整:

heroku config:get GOOGLE_APPLICATION_CREDENTIALS

如果输出的是完整的JSON内容,就说明设置成功了。

内容的提问来源于stack exchange,提问作者hulkinBrain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 08:47:44