部署在Heroku的Django应用构建完成但无法启动,报H10错误
Django应用Heroku构建成功但启动失败(H10错误)
错误日志
2023-09-04T13:32:07.484629+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=journallove-e9a7a6e26520.herokuapp.com request_id=3515dc4d-fb0c-4ccb-bbdc-cb81a1ae5a31 fwd="130.58.166.192" dyno= connect= service= status=503 bytes= protocol=https 2023-09-04T13:32:07.768182+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=journallove-e9a7a6e26520.herokuapp.com request_id=8c703a21-5109-4f0a-af7a-22c0e2687c8a fwd="130.58.166.192" dyno= connect= service= status=503 bytes= protocol=https 2023-09-04T13:32:14.000000+00:00 app[api]: Build succeeded 2023-09-04T13:32:35.613845+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=journallove-e9a7a6e26520.herokuapp.com request_id=6c9caf84-4fb9-4a08-96ea-ee41bae09184 fwd="130.58.166.192" dyno= connect= service= status=503 bytes= protocol=https 2023-09-04T13:32:35.808771+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=journallove-e9a7a6e26520.herokuapp.com request_id=cd6e61e2-ee17-4f5e-abb4-c2ca33636d17 fwd="130.58.166.192" dyno= connect= service= status=503 bytes= protocol=https 2023-09-04T13:32:45.705631+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/" host=journallove-e9a7a6e26520.herokuapp.com request_id=5d813e56-e116-4432-86f5-1ba43ba9227b fwd="130.58.166.192" dyno= connect= service= status=503 bytes= protocol=https 2023-09-04T13:32:45.899516+00:00 heroku[router]: at=error code=H10 desc="App crashed" method=GET path="/favicon.ico" host=journallove-e9a7a6e26520.herokuapp.com request_id=14f662de-7547-40d0-bee9-522e847922c4 fwd="130.58.166.192" dyno= connect= service= status=503 bytes= protocol=https
现有配置信息
Procfile
web gunicorn journallove.wsgi:application --log-file -
requirements.txt
asgiref==3.6.0 blind==0.0.1 blinker==1.6.2 certifi==2023.5.7 charset-normalizer==3.1.0 click==8.1.3 cloudpickle==2.2.1 Cython==0.29.35 distlib==0.3.6 dj-database-url==2.1.0 Django==4.2.1 entrypoints==0.4 filelock==3.12.2 Flask==2.3.2 gitdb==4.0.10 GitPython==3.1.31 greenlet==2.0.2 gunicorn==20.1.0 django-heroku==0.3.1 idna==3.4 itsdangerous==2.1.2 Jinja2==3.1.2 joblib==1.3.1 MarkupSafe==2.1.2 mysql-connector-python==8.0.33 mysqlclient==2.1.1 nltk==3.8.1 numpy==1.24.3 package-json==0.0.0 pandas==2.0.1 platformdirs==3.8.1 protobuf==3.20.3 psycopg2-binary==2.9.7 PyMySQL==1.0.3 pytz==2023.3 PyYAML==6.0 querystring-parser==1.2.4 regex==2023.6.3 requests==2.31.0 six==1.16.0 smmap==5.0.0 SQLAlchemy==2.0.15 sqlparse==0.4.4 templates==0.0.5 tqdm==4.65.0 typing_extensions==4.6.2 tzdata==2023.3 urllib3==2.0.2 views-py==2.0.0 virtualenv==20.23.1 Werkzeug==2.3.4
已尝试将Procfile移至根目录,问题仍未解决。
排查解决步骤
1. 获取应用启动的详细报错日志
当前日志仅显示H10崩溃状态,无具体原因,执行以下命令查看应用启动阶段的日志:
heroku logs --source app --tail
日志中会包含模块缺失、配置错误、数据库连接失败等核心崩溃原因。
2. 修正Procfile格式
Heroku Procfile的标准格式为进程类型: 命令,你的Procfile缺少冒号,导致Heroku无法正确识别启动指令,修改为:
web: gunicorn journallove.wsgi:application --log-file -
同时确保文件名为Procfile(无后缀),且位于项目根目录。
3. 验证WSGI入口路径正确性
确认journallove.wsgi:application路径匹配项目结构:
- 项目根目录下必须存在
journallove文件夹 - 该文件夹内要有
wsgi.py文件,且文件中定义了application变量(Django默认生成的配置中已包含)
4. 清理冗余依赖并修复冲突
你的requirements.txt包含大量无关依赖(如Flask、virtualenv、多个数据库驱动),可能引发依赖冲突或不必要的资源占用:
- 移除Django应用不需要的依赖:Flask、virtualenv、mysqlclient、mysql-connector-python、PyMySQL(Heroku默认使用PostgreSQL,保留
psycopg2-binary即可) - 检查并移除版本冲突的依赖,比如
blind==0.0.1这类无效包 - 重新生成干净的requirements.txt:
pip freeze > requirements.txt
5. 检查Django生产环境配置
- ALLOWED_HOSTS:必须包含Heroku应用域名,避免请求被拦截:
ALLOWED_HOSTS = ['journallove-e9a7a6e26520.herokuapp.com', 'localhost']
- 数据库配置:确保使用
dj-database-url读取Heroku提供的数据库环境变量:
import dj_database_url DATABASES = {'default': dj_database_url.config(conn_max_age=600)}
- DEBUG模式:生产环境必须关闭DEBUG,否则可能引发安全问题或崩溃:
DEBUG = False
6. 本地模拟生产环境测试
在本地使用Gunicorn启动应用,验证是否能正常运行:
gunicorn journallove.wsgi:application
如果本地启动失败,先修复本地错误,再重新部署到Heroku。
内容的提问来源于stack exchange,提问作者user22493719
相关产品推荐
相关产品推荐

