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

在Heroku部署Flask项目时遇OSError: [Errno 36]文件名过长问题

问题根源

你犯的核心错误是混淆了环境变量的用途:BIGQUERY_KEY_PATH原本应该指向密钥文件的路径,但你直接把完整的JSON密钥内容赋值给了这个变量。当你的代码尝试将这个变量当作文件路径去读取时,就会把一长串JSON文本当成文件名,自然触发「文件名过长」的错误。

两种解决办法

方法一:直接读取环境变量中的密钥内容(推荐)

修改你的Flask代码,不再把BIGQUERY_KEY_PATH当作文件路径,而是直接读取其中的JSON内容来初始化BigQuery客户端:

from google.cloud import bigquery
import os
import json

# 从Heroku环境变量获取密钥内容
key_json = os.environ.get("BIGQUERY_KEY_PATH")
if not key_json:
    raise ValueError("BIGQUERY_KEY_PATH 环境变量未设置")

# 将JSON字符串转为字典
key_data = json.loads(key_json)
# 初始化BigQuery客户端
client = bigquery.Client.from_service_account_info(key_data)

这种方式不需要修改你之前的heroku config:set命令,因为现在变量存的就是密钥内容,代码直接使用该内容而非路径。

方法二:将密钥文件打包进项目并设置路径

如果你坚持要使用文件路径的方式:

  • 将bq_key.json放到你的Flask项目目录内(比如创建keys/子目录存放)
  • 更新Heroku环境变量为项目内的相对路径:
heroku config:set BIGQUERY_KEY_PATH="./keys/bq_key.json" --app app_name

⚠️ 注意:绝对不要把bq_key.json提交到Git仓库,一定要将其添加到.gitignore中。但这样Heroku部署时会缺少该文件,因此你需要用安全的方式传递文件,这种方法不如方法一简便安全。

内容的提问来源于stack exchange,提问作者Geoffrey Rolin Jacquemyns

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:09