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

Heroku部署Dash应用出现H10崩溃及FileNotFoundError问题求助

Dash应用部署到Heroku触发H10崩溃报错FileNotFoundError

问题描述

尝试将第一个Dash应用部署到Heroku时,无论采用何种操作方式,始终触发H10 app crashed error。查看heroku logs时发现存在FileNotFoundError,怀疑该错误是导致应用崩溃的根本原因。
参考线上教程的文件夹内文件引用方法编写的读文件代码如下:

PATH = pathlib.Path(__file__).parent
DATA_PATH = PATH.joinpath("../datasets").resolve()
top_games = pd.read_csv(DATA_PATH.joinpath("topgames.csv"))

相关文件夹结构、代码与错误日志截图如下:
文件夹结构、代码与错误日志截图

日志显示的核心错误信息:

FileNotFoundError: [Errno 2] No such file or directory: '/datasets/topgames.csv'

补充说明:

  • 应用可成功部署到Heroku,但访问时出现应用错误、无任何内容展示
  • 使用完全相同的文件结构在localhost本地运行时,应用可正常工作
  • 项目完整代码仓库:Chess-Games-Analysis

解决方案

本地运行正常但Heroku环境报文件不存在,核心原因是相对路径../在Heroku运行环境下解析层级错误,或是数据集文件未被正确上传到Heroku服务器,按以下步骤排查修复:

  1. 排查文件上传规则
    打开项目根目录的.gitignore文件,确认没有将datasets/目录、*.csv后缀文件加入忽略列表。Heroku基于git推送的内容构建运行环境,被git忽略的文件不会上传到服务器,必然触发文件找不到错误。
  2. 修正路径拼接逻辑
    你日志里报错的路径是系统根目录下的/datasets/topgames.csv,说明../跳转多了一层:本地运行脚本时执行上下文可能在子目录,../datasets刚好能匹配到数据集位置,但Heroku通过gunicorn启动应用时默认工作目录是项目根目录,这时候写../datasets会跳出项目目录到系统根目录找文件,自然找不到。
    替换原有路径代码为固定基于入口文件位置的解析逻辑,不要依赖运行时工作目录:
    import pathlib
    import pandas as pd
    
    # 获取当前入口app.py所在的绝对目录
    BASE_PATH = pathlib.Path(__file__).parent.resolve()
    # 直接拼接数据集路径,避免跨层级../跳转
    top_games = pd.read_csv(BASE_PATH.joinpath("datasets", "topgames.csv"))
    
    修改后先在本地验证可以正常读取文件,再推送部署到Heroku。
  3. 路径仍不对时加调试日志定位
    如果修改后还是报错,在读取文件前加一行临时调试代码,打印当前目录下的文件列表:
    # 临时调试用,问题解决后可删除
    print("当前入口目录文件列表:", list(BASE_PATH.iterdir()))
    
    重新部署后执行heroku logs --tail查看实时日志,就能明确看到datasets文件夹的实际位置,对应调整路径拼接规则即可。
  4. 排查其他可能触发H10错误的配置问题
    确认项目根目录下三个Heroku必需的配置文件内容正确:
    • requirements.txt:列全所有依赖,包含dash、pandas、gunicorn
    • Procfile:内容为web: gunicorn app:server(入口文件名为app.py时使用该配置)
    • runtime.txt:填写和本地运行一致的Python版本,避免版本兼容问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 02:27:20