Heroku部署Django+PostgreSQL 生产环境settings.py配置方法
Heroku部署Django+PostgreSQL的数据库HOST配置说明
不要手动硬编码生产环境的数据库HOST值:你当前配置里的localhost指向的是Heroku上运行应用的dyno容器本身,根本连不上独立托管的Postgres服务;就算你去后台查到固定HOST地址填进去,后续Heroku做数据库迁移、故障切换时连接参数会自动更新,硬编码配置会直接失效,维护成本极高。
Heroku在你绑定PostgreSQL附加组件后,会自动往应用环境里注入DATABASE_URL环境变量,这个变量里已经打包了生产库全部连接信息:HOST、PORT、库名、用户名、密码、SSL要求,直接解析使用即可,这也是Heroku官方推荐的零额外配置方案。
具体配置步骤
- 安装必备依赖
先安装数据库连接解析工具和PostgreSQL驱动,装完务必把依赖写入requirements.txt,不然Heroku部署时会报缺包错误:pip install dj-database-url psycopg2-binary pip freeze > requirements.txt - 修改
settings.py配置
替换原有纯本地硬编码的配置,实现本地开发、Heroku生产环境自动适配,不需要来回切换参数:# 在settings.py顶部添加导入 import os import dj_database_url # 原有本地开发用的数据库配置保留作为兜底 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.postgresql', 'NAME': 'trilz', 'USER': 'postgres', 'PASSWORD': 'franz123', 'HOST': 'localhost', 'PORT': '5432', } } # 检测到运行在Heroku环境时,自动读取平台注入的数据库配置覆盖本地参数 if 'DYNO' in os.environ: DATABASES['default'] = dj_database_url.config( conn_max_age=600, ssl_require=True # Heroku托管的Postgres强制要求SSL连接 ) - 部署后验证
把代码推到Heroku部署完成后,执行以下命令跑数据库迁移,能正常执行就说明数据库连接配置完全正确:heroku run python manage.py migrate
补充说明
如果你一定要手动查看生产库的HOST值,可以进入Heroku控制台,找到你绑定的Heroku Postgres附加组件,在详情页的数据库连接信息板块能看到对应Host字段,但非常不推荐手动硬编码该值,平台可能在运维操作时动态调整连接参数,硬编码会埋下服务不可用的隐患。
内容的提问来源于stack exchange,提问作者Franz Zapanta
相关产品推荐
相关产品推荐

