Heroku部署Django应用报错求助:按DjangoGirls教程操作仍遇H10错误
看起来你遇到了两个阶段的问题:首先是Python版本与Heroku栈不兼容,修改版本后又出现了应用启动失败的H10错误。我们一步步来排查解决:
一、先确认Python版本问题是否完全解决
你第一次的错误是Requested runtime (python-3.7) is not available for this stack (heroku-18),这是因为Heroku的heroku-18栈需要精确的Python版本号(不能只写大版本)。虽然你改成了python-3.7.1,但首先要确认这次推送是否成功完成构建:
执行命令查看最近的构建状态:
heroku builds --app srms-demo如果最新的构建状态是
failed,那说明版本还是有问题。此时你可以尝试使用heroku-18栈支持的其他3.7.x版本,比如python-3.7.2或python-3.7.5,修改runtime.txt后重新推送。注意:
runtime.txt的格式必须严格为python-x.x.x,小写、无空格,不能有其他多余内容。
二、如果构建已成功,排查H10应用崩溃的原因
H10错误表示应用启动失败,通常是Django配置或依赖问题导致的,以下是最常见的排查点:
1. 检查Procfile是否正确配置
Procfile是Heroku启动应用的关键配置,必须放在项目根目录,内容格式为:
web: gunicorn your_project_name.wsgi --log-file -
这里的your_project_name要替换成你Django项目中包含wsgi.py的文件夹名称(比如你的项目是srms_demo,那就是srms_demo.wsgi)。如果路径写错,应用会启动失败。
2. 确认ALLOWED_HOSTS包含Heroku域名
在settings.py中,必须把你的Heroku域名加入ALLOWED_HOSTS:
ALLOWED_HOSTS = ['srms-demo.herokuapp.com', 'localhost', '127.0.0.1']
更灵活的方式是用环境变量配置,避免硬编码:
import os ALLOWED_HOSTS = [os.environ.get('ALLOWED_HOSTS', 'srms-demo.herokuapp.com')]
然后设置环境变量:
heroku config:set ALLOWED_HOSTS=srms-demo.herokuapp.com --app srms-demo
3. 确保SECRET_KEY通过环境变量设置
Heroku生产环境不能硬编码SECRET_KEY,在settings.py中修改:
import os SECRET_KEY = os.environ.get('SECRET_KEY', '你的本地开发用密钥')
然后设置环境变量(可以用你本地settings.py中的密钥,或者生成一个新的):
heroku config:set SECRET_KEY="your-secure-secret-key-here" --app srms-demo
4. 检查数据库配置与迁移
- 确保
requirements.txt中包含dj-database-url,然后在settings.py中用它解析Heroku的数据库URL:import dj_database_url DATABASES = { 'default': dj_database_url.config(default='sqlite:///db.sqlite3') } - 运行数据库迁移:
heroku run python manage.py migrate --app srms-demo
5. 收集静态文件
Django生产环境需要收集静态文件到统一目录,确保settings.py中有:
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles') STATIC_URL = '/static/'
然后执行收集命令:
heroku run python manage.py collectstatic --noinput --app srms-demo
6. 查看详细启动日志
最后,执行命令实时查看日志,触发应用启动(比如访问你的Heroku域名),就能看到具体的错误信息:
heroku logs --tail --app srms-demo
日志里会显示比如模块导入错误、数据库连接失败、配置错误等具体问题,这是定位H10错误的核心依据。
内容的提问来源于stack exchange,提问作者Riajul Kashem

