首次部署Django应用至Heroku遭遇系列故障求助:构建失败、H14无Web进程运行等问题的解决方案
解决Django部署Heroku的系列问题(H81、migrate失败、H14)
我刚帮几个朋友踩过这些Heroku部署Django的坑,咱们一步步拆解解决:
1. 先搞定Procfile(核心解决H14无Web进程问题)
你的关键问题之一是Procfile没被Heroku正确识别,导致找不到要启动的Web服务。按下面的步骤来:
- 确保Procfile在项目根目录,文件名就是
Procfile(首字母大写,绝对不能加.txt之类的后缀) - 内容必须精准指向你的Django项目的wsgi文件,格式是:
把web: gunicorn your_project_name.wsgi --log-file -your_project_name替换成你实际的项目名(就是包含settings.py和wsgi.py的那个文件夹的名字) - 改完后重新提交到Git:
git add Procfile git commit -m "Fix Procfile to define web process" git push heroku main - 推送完成后,用命令确认Web进程状态:
如果显示heroku psweb.1: up就没问题;要是还是没进程,手动启动一个:heroku ps:scale web=1
2. 正确处理静态文件(替代临时禁用的DISABLE_COLLECTSTATIC)
禁用DISABLE_COLLECTSTATIC只是权宜之计,生产环境建议规范配置静态文件收集:
- 在
settings.py里添加静态文件根目录配置:import os STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_URL = '/static/' - 在项目根目录创建
staticfiles文件夹(本地先创建,确保Git能追踪到):mkdir staticfiles touch staticfiles/.gitkeep # 空文件夹需要这个文件才能被Git提交 git add staticfiles/ git commit -m "Add staticfiles directory for collectstatic" - 移除之前设置的禁用环境变量:
heroku config:unset DISABLE_COLLECTSTATIC - 重新推送代码,这样Heroku运行
collectstatic时就不会再报找不到目录的错误了。
3. 修复migrate失败(状态码2)的问题
之前python manage.py migrate退出码2,大概率是数据库连接或依赖缺失导致的:
- 确保
requirements.txt里包含PostgreSQL驱动和数据库配置工具:dj-database-url==2.0.0 psycopg2-binary==2.9.9 gunicorn==21.2.0 - 在
settings.py里用Heroku自动生成的数据库链接配置:import dj_database_url # 替换原来的DATABASES配置 DATABASES = { 'default': dj_database_url.config( default='postgres://localhost/your_local_db_name', conn_max_age=600 ) } - 手动在Heroku上运行迁移,确认是否成功:
如果返回状态码0,说明数据库迁移正常了。heroku run python manage.py migrate
4. 最后验证部署
做完以上步骤后:
- 重新推送代码到Heroku
- 用
heroku logs --tail实时查看日志,确认没有新的报错 - 访问你的应用地址
https://off1.herokuapp.com/,应该就能正常加载了
如果还是有问题,优先看日志里的具体错误提示——比如有没有模块找不到的情况,那就要检查requirements.txt是不是漏了依赖包。
内容的提问来源于stack exchange,提问作者Era
相关产品推荐
相关产品推荐

