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

如何在Ruby on Rails中使用环境变量实现Google Vision/Cloud认证

解决Heroku上Google Cloud认证JSON的配置问题

我之前也踩过一模一样的坑,折腾了好一会儿才摸透门道——核心问题其实是Heroku的环境变量机制和本地文件路径的差异,咱们一步步来搞定:

1. 预处理你的认证JSON文件

首先得把服务账号的JSON文件转换成单行字符串,避免换行导致环境变量解析出错:

  • 如果你有jq工具(推荐用这个,省事不出错),直接在终端运行:
    jq -c . path/to/your-service-account.json
    
    这个命令会输出压缩后的纯单行JSON。
  • 要是没装jq,也可以手动打开JSON文件,把所有换行符删掉,注意保留引号、括号的完整结构,别改乱了格式。

2. 在Heroku中设置环境变量

两种方式选你顺手的:

方式一:用Heroku CLI设置

打开终端,运行下面的命令(记得替换成你的应用名和单行JSON):

heroku config:set GOOGLE_CLOUD_AUTH_JSON='这里替换成你刚得到的单行JSON字符串' -a 你的应用名称

一定要用单引号把JSON包起来,防止终端解析特殊字符时出问题。

方式二:通过Heroku后台设置

  1. 登录Heroku后台,找到你的应用,进入「Settings」页面
  2. 滚动到「Config Vars」区域,点击「Reveal Config Vars」
  3. 新增变量:
    • Key:GOOGLE_CLOUD_AUTH_JSON
    • Value:粘贴预处理好的单行JSON字符串
  4. 点击「Add」保存就行

3. 在代码中加载认证凭证

这步是关键!别直接依赖GOOGLE_APPLICATION_CREDENTIALS(它需要指向本地文件路径,但Heroku的文件系统是临时的),要从我们设置的环境变量里读取JSON内容来加载凭证:

举个Python示例(其他语言思路类似)

import os
import json
from google.oauth2 import service_account
from google.cloud import vision

# 从Heroku环境变量获取JSON内容
auth_json_str = os.environ.get('GOOGLE_CLOUD_AUTH_JSON')
if not auth_json_str:
    raise ValueError("请确认已设置GOOGLE_CLOUD_AUTH_JSON环境变量")

# 解析JSON字符串并加载凭证
auth_json = json.loads(auth_json_str)
credentials = service_account.Credentials.from_service_account_info(auth_json)

# 用凭证初始化服务客户端
client = vision.ImageAnnotatorClient(credentials=credentials)

如果你必须用GOOGLE_APPLICATION_CREDENTIALS路径

那可以在代码启动时,把环境变量里的JSON写入临时文件,再设置环境变量指向这个文件:

import os
import tempfile
import json

auth_json_str = os.environ.get('GOOGLE_CLOUD_AUTH_JSON')
# 创建临时JSON文件
with tempfile.NamedTemporaryFile(mode='w', delete=False, suffix='.json') as f:
    f.write(auth_json_str)
# 设置环境变量指向临时文件
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = f.name

# 接下来正常初始化客户端即可
from google.cloud import vision
client = vision.ImageAnnotatorClient()

4. 验证配置是否生效

部署代码后,可以用下面的命令检查环境变量是否正确设置:

heroku config:get GOOGLE_CLOUD_AUTH_JSON -a 你的应用名称

也可以查看应用日志,排查认证相关的错误:

heroku logs --tail -a 你的应用名称

如果还是不行,建议排查这几点:

  • JSON字符串有没有转义错误(用单引号包裹基本能避免)
  • 代码里环境变量的Key有没有拼写错误
  • 服务账号是否拥有对应API的权限(比如Vision API有没有启用)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:46:29