Django API部署至Heroku遇H10应用崩溃错误,求解决方法
刚看到你部署Django API到Heroku时遇到了H10(App crashed)错误,这种错误一般是应用启动环节出了问题,结合你给出的配置和依赖信息,我整理了几个核心排查点和修复方案:
1. 数据库配置不兼容Heroku环境(大概率是核心原因)
你当前的数据库配置是从本地.env文件读取参数,但Heroku不会上传.env文件(通常会被.gitignore忽略),而且Heroku的Postgres服务会自动生成DATABASE_URL环境变量,不需要手动设置NAME/USER这类单独参数。
修复步骤:
- 先安装
dj-database-url工具,用来自动解析Heroku的数据库链接:
把这个依赖添加到你的pip install dj-database-urlrequirements.txt中。 - 修改
settings.py里的数据库配置:
这样本地环境可以继续用import dj_database_url # 替换原来的DATABASES配置 DATABASES = { 'default': dj_database_url.config(default=env("DATABASE_URL")) }.env里的DATABASE_URL,Heroku上会自动读取平台提供的数据库链接。
2. Heroku环境变量未配置
你的settings.py用django-environ读取DJANGO_SECRET_KEY、DJANGO_DEBUG等变量,但这些变量在Heroku上未设置的话,应用启动时会直接崩溃。
去Heroku后台的Settings -> Config Vars里添加以下变量:
DJANGO_SECRET_KEY:填入你本地.env里的Django密钥即可DJANGO_DEBUG:生产环境建议设为False- 无需添加数据库相关的单独变量,Heroku会自动处理
DATABASE_URL
3. 缺少Procfile启动文件
Heroku需要明确知道启动应用的命令,根目录如果没有Procfile,可能导致启动失败。
在项目根目录创建一个无后缀的Procfile文件,内容如下:
web: gunicorn project.wsgi --log-file -
注意这里的project要和你settings.py里WSGI_APPLICATION = 'project.wsgi.application'中的project保持一致。
4. 静态文件配置不完善
Django生产环境需要收集静态文件,Heroku部署时会自动执行collectstatic命令,配置不当会导致启动失败。
修复步骤:
- 安装
whitenoise处理静态文件:
把依赖加到pip install whitenoise==5.2.0requirements.txt中。 - 修改
settings.py:# 添加静态文件根目录 STATIC_ROOT = BASE_DIR / 'staticfiles' # 配置静态文件存储 STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage' - 更新
MIDDLEWARE,把Whitenoise中间件放到SecurityMiddleware之后:MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'whitenoise.middleware.WhiteNoiseMiddleware', # 新增此行 'corsheaders.middleware.CorsMiddleware', # 其余中间件保持不变 ]
5. 查看详细崩溃日志
如果以上步骤都试过还是不行,运行下面的命令查看实时日志,能找到具体崩溃原因(比如依赖缺失、代码错误等):
heroku logs --tail
按照这些步骤调整后重新部署,应该就能解决H10崩溃问题了。
内容的提问来源于stack exchange,提问作者Dave

