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

Heroku部署Django项目报localhost数据库连接拒绝错误解决方法

问题根因

这个报错本质是数据库配置没有适配Heroku的部署逻辑:

  • 本地存敏感配置的.env文件不会被部署到Heroku容器,代码里读取的DB_*系列变量在线上环境要么没值,要么你本地填的localhost在线上完全无效——Heroku的应用容器本身不运行PostgreSQL服务,连接127.0.0.1:5432自然会被拒绝。
  • Heroku的PostgreSQL是独立托管的数据库实例,连接信息由平台自动注入,不是你本地写死的那套参数。
解决步骤
  • 给Heroku应用挂载Postgres服务
    打开Heroku后台对应应用的Resources标签,在Add-ons搜索框找到Heroku Postgres,选免费套餐开通即可。开通后平台会自动给应用注入一个DATABASE_URL环境变量,里面包含了线上数据库的完整连接信息(地址、端口、账号、密码、库名)。
    注意:如果之前你手动在Heroku的Config Vars里填过DB_HOST=localhost,直接删掉,这个配置完全不符合Heroku的服务架构。
  • 调整数据库配置兼容本地和线上环境
    先在本地安装依赖:pip install dj-database-url psycopg2-binary,记得把这两个包加到requirements.txt里。
    然后修改settings.py里的数据库配置:
    # 文件顶部新增导入
    import dj_database_url
    
    # 保留本地开发用的原有数据库配置,后面追加线上环境覆盖逻辑
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql',
            'NAME': config('DB_NAME'),
            'USER':  config('DB_USER'),
            'PASSWORD' : config('DB_PASSWORD'),
            'HOST' : config('DB_HOST'),
            'PORT': '5432',
        }
    }
    # 自动读取Heroku注入的DATABASE_URL覆盖本地配置,本地开发不受影响
    DATABASES['default'].update(dj_database_url.config(conn_max_age=600, ssl_require=True))
    
  • 检查.gitignore配置
    确认项目根目录的.gitignore里包含.env规则,不要把本地敏感配置文件提交到代码仓库。
  • 重新部署并同步数据库结构
    把修改后的代码推到Heroku,执行heroku run python manage.py migrate完成线上数据表创建,再访问/login接口就不会报连接错误了。

如果你不想用dj-database-url,也可以手动去Heroku后台的Settings -> Config Vars页面,把Heroku Postgres提供的连接参数拆成DB_NAME/DB_USER/DB_PASSWORD/DB_HOST/DB_PORT逐个填入,但官方更推荐直接读取DATABASE_URL的方式,不用手动维护参数,后续数据库变更也不需要调整配置。

内容的提问来源于stack exchange,提问作者Avadhesh Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:24:30