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

Heroku部署Python Discord机器人出现FileNotFoundError崩溃如何解决

错误根因

报错指向logger.py第30行的日志文件初始化逻辑,Python logging 模块的FileHandler不会自动创建不存在的父目录:

  1. 你本地开发环境提前手动创建了logs目录,所以本地运行正常
  2. logs目录通常会被加入.gitignore过滤规则,不会提交到GitHub,Heroku拉取代码部署后根目录下没有logs文件夹,创建日志文件时就触发了FileNotFoundError
可选解决方案
  • 方案一:运行时自动创建日志目录
    修改utils/logger.py的init方法,在实例化FileHandler前添加目录创建逻辑:
import os
# 下方代码放在 log_file = logging.FileHandler(...) 之前执行
os.makedirs('logs', exist_ok=True)

exist_ok=True参数可兼容本地已存在logs目录的场景,不会重复创建报错。

  • 方案二:适配Heroku运行逻辑,移除本地文件日志输出
    Heroku的dyno自带日志收集能力,会自动捕获所有输出到stdout/stderr的内容,你可以直接修改日志配置,删掉FileHandler相关逻辑,只保留向控制台输出的StreamHandler即可。

注意:Heroku的文件系统是临时存储,dyno重启、重新部署、24小时自动轮转时都会清空所有本地写入的文件,就算你创建了logs目录写入日志,也会随时丢失,方案二是最适配Heroku平台的处理方式。

  • 方案三:提交logs目录到Git仓库
    在本地项目根目录的logs文件夹下新建一个空的.gitkeep文件,修改.gitignore规则,将原来屏蔽logs目录的规则改为只屏蔽日志文件:
# 原规则如果是 logs/ 就改成下面的
/logs/*.log

之后把logs目录和.gitkeep提交到GitHub,重新部署到Heroku就会自动生成logs目录。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 07:18:04