Heroku部署时无法找到环境变量指定路径的JSON凭证文件
解决Heroku部署Google Analytics API时凭证文件找不到的问题
我在使用Google Analytics API时,创建了服务账号并将包含project_id、密钥等信息的.json凭证文件放在服务器中,本地环境变量配置如下:
GOOGLE_APPLICATION_CREDENTIALS="./validation/google-analytics/credentials.json"
本地localhost运行正常,但部署到Heroku生产服务器后出现错误:
The file at "./validation/google-analytics/credentials.json" does not exist, or is not a file. ENOENT: no such file or directory, lstat '/app".'
问题原因分析
- 相对路径解析差异:Heroku的默认工作目录是
/app,本地的相对路径./在Heroku环境下可能因构建流程(如打包、依赖安装)导致文件实际位置偏移,路径指向错误。 - 凭证文件未提交到Git:如果
credentials.json被.gitignore规则排除,Heroku部署时服务器上不会存在该文件。 - 环境变量格式错误:错误信息中的
/app".显示路径解析异常,大概率是设置环境变量时引号转义或格式有误。
解决方案
方案1:确认文件实际路径并调整环境变量
通过Heroku CLI进入服务器终端,定位凭证文件的绝对路径:
heroku run bash find /app -name "credentials.json"
将环境变量修改为该绝对路径,例如:
heroku config:set GOOGLE_APPLICATION_CREDENTIALS="/app/build/validation/google-analytics/credentials.json"
方案2:检查Git提交状态(不推荐用于敏感文件)
若凭证文件无敏感信息,检查.gitignore确保未排除该文件,然后提交到Git:
git add validation/google-analytics/credentials.json git commit -m "Add GA credentials file" git push heroku main
方案3:将凭证内容存入环境变量(安全首选)
直接提交敏感文件到Git存在风险,推荐将凭证内容转为字符串存入Heroku环境变量:
- 复制
credentials.json的全部内容。 - 通过CLI设置环境变量:
heroku config:set GOOGLE_APPLICATION_CREDENTIALS_CONTENT='{"type": "service_account", ...}'
- 在代码中读取变量并临时生成文件(以Node.js为例):
const fs = require('fs'); const path = require('path'); const credsContent = process.env.GOOGLE_APPLICATION_CREDENTIALS_CONTENT; const tempPath = path.join(__dirname, 'temp-creds.json'); fs.writeFileSync(tempPath, credsContent); process.env.GOOGLE_APPLICATION_CREDENTIALS = tempPath; // 初始化GA API客户端 const {AnalyticsDataClient} = require('@google-analytics/data'); const client = new AnalyticsDataClient();
方案4:修复环境变量格式错误
去掉环境变量设置中的多余引号(路径无空格时无需引号):
heroku config:set GOOGLE_APPLICATION_CREDENTIALS=./validation/google-analytics/credentials.json
内容的提问来源于stack exchange,提问作者Djaenike
相关产品推荐
相关产品推荐

