Django Postgres应用本地正常,GitHub部署Heroku后报H10错误503无法访问
Heroku部署Django出现H10错误的排查步骤
- 第一步:拉取完整运行日志定位崩溃点
仅路由层的H10日志只能说明应用启动失败,执行heroku logs --tail --app 你的应用名称查看应用启动阶段的完整报错,优先看导入失败、配置缺失、数据库连接失败类的报错信息。 - 第二步:核对生产环境与本地的配置差异
- 确认
settings.py中ALLOWED_HOSTS已添加你的Heroku应用域名(格式为xxx.herokuapp.com) - 确认
SECRET_KEY已通过Heroku配置变量设置,未硬编码在代码中,也不存在生产环境未配置的情况 - 确认已安装
django-heroku依赖,且在settings.py末尾添加了适配代码:
import django_heroku django_heroku.settings(locals())- 确认未在生产环境开启DEBUG模式时,静态文件相关配置正确,
STATIC_ROOT、STATIC_URL参数已正确配置。
- 确认
- 第三步:核对依赖与启动配置
- 确认
requirements.txt已包含所有生产依赖,尤其是gunicorn、psycopg2-binary这类部署必需的包,不要遗漏本地开发时额外安装的依赖 - 可在根目录新增
runtime.txt指定和本地一致的Python版本,避免版本兼容问题,内容格式为python-3.9.10(替换为你本地使用的版本) - 确认
Procfile中web进程启动命令正确,格式为web: gunicorn 你的项目名.wsgi --log-file -,注意替换为你自己的Django项目根模块名称 - 执行
heroku ps查看web dyno运行状态,若显示web进程数为0,执行heroku ps:scale web=1手动启动进程。
- 确认
- 第四步:验证迁移文件提交状态
确认所有应用的migrations目录下的迁移文件都已提交到GitHub,没有被.gitignore规则过滤,避免Heroku执行migrate时无法找到迁移文件导致表结构缺失。 - 第五步:本地复现生产环境故障
本地关闭DEBUG模式,修改ALLOWED_HOSTS为127.0.0.1,使用gunicorn 你的项目名.wsgi启动项目,看是否能正常运行,本地可复现的故障可以直接打断点排查根因。
如果以上步骤都排查后仍无法定位问题,可以删除现有Heroku应用重新部署,建议先部署最小可用的空Django项目验证部署流程正常,再逐步迁移业务代码,逐步定位故障点。
内容的提问来源于stack exchange,提问作者luke skycoder
相关产品推荐
相关产品推荐

