Django部署Heroku出现应用错误无法访问的解决方法
解决方案
你遇到的H10崩溃是核心配置错误导致的,按以下步骤修复即可:
1. 补全线上环境变量配置
Heroku线上运行环境不会自动读取你本地项目目录下的.env文件,所有本地存储在.env里的参数都需要手动配置到Heroku环境中:
- 如果使用Heroku自带的PostgreSQL数据库(推荐),先执行
heroku addons:create heroku-postgresql:hobby-dev挂载免费版Postgres插件,插件创建成功后Heroku会自动生成DATABASE_URL环境变量,无需手动配置单值数据库参数。
安装依赖解析数据库连接串:pip install dj-database-url psycopg2-binary,将settings.py中原有DATABASES配置替换为:import dj_database_url DATABASES = { 'default': dj_database_url.config(conn_max_age=600) } - 如果使用自建外部数据库,将
.env中所有数据库相关参数通过Heroku CLI逐个配置到线上,示例:heroku config:set DATABASE_NAME=你的数据库名 heroku config:set DATABASE_USER=你的数据库用户名 heroku config:set DATABASE_PASSWORD=你的数据库密码 heroku config:set DATABASE_HOST=你的数据库地址 heroku config:set DATABASE_PORT=你的数据库端口 - 配置完成后执行
heroku config可查看所有已生效的线上环境变量,确认无遗漏。 - 如果你本地用
python-dotenv加载.env文件,需要把加载逻辑放到DEBUG判断分支内,避免线上读取不存在的本地文件报错:import os if os.getenv('DEBUG', 'False') == 'True': from dotenv import load_dotenv load_dotenv()
2. 修复ALLOWED_HOSTS配置
当前ALLOWED_HOSTS仅配置了本地运行地址,没有包含Heroku分配的应用域名,将配置修改为:
ALLOWED_HOSTS = ['0.0.0.0', 'localhost', '.herokuapp.com']
如果后续绑定了自定义域名,把自定义域名追加到列表中即可。
3. (必改)替换生产启动命令
Django自带的runserver是仅用于本地开发的单线程服务,不适合生产环境使用,会存在稳定性和安全风险:
- 安装生产级WSGI服务:
pip install gunicorn - 将Procfile内容替换为以下内容,注意把
你的项目目录名替换为项目中存放wsgi.py文件的文件夹名称:web: gunicorn 你的项目目录名.wsgi --log-file -
4. 重新部署验证
- 把所有修改后的代码提交到Git仓库,执行
git push heroku main(如果你的主分支是master则执行git push heroku master)触发重新部署 - 部署完成后执行
heroku run python manage.py migrate同步数据库表结构 - 执行
heroku logs --tail查看实时日志,确认无启动报错后即可正常访问应用。
内容的提问来源于stack exchange,提问作者Noor ul ain Ibrahim
相关产品推荐
相关产品推荐

