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

Heroku部署Django应用报错求助:按DjangoGirls教程操作仍遇H10错误

解决Heroku部署Django应用时的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,但首先要确认这次推送是否成功完成构建:

  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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 09:32:27