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

Linode服务器上Django项目无法指向新PostgreSQL数据库求助

解决Django部署后数据库配置不生效的问题

核心排查与解决步骤

  • 确认当前加载的settings配置
    部署环境可能会使用独立的生产配置文件(比如settings_production.py),而非你修改的默认settings.py。直接在服务器上执行命令验证当前生效的数据库配置:

    python manage.py shell -c "from django.conf import settings; print(settings.DATABASES['default']['NAME'])"
    

    如果输出不是mydb,说明项目加载的是其他配置文件,找到对应文件修改即可。

  • 重启应用服务器(而非仅Nginx)
    Nginx只是反向代理,真正运行Django的是Gunicorn/uWSGI这类应用服务,只重启Nginx不会让配置生效。以Gunicorn为例:

    # 假设用systemd管理Gunicorn
    sudo systemctl restart gunicorn
    

    若用uWSGI:

    sudo systemctl restart uwsgi
    
  • 清除配置缓存
    如果项目开启了配置缓存,修改settings后可能不会立即生效。执行以下命令清除缓存:

    # 清除Django缓存(若启用了缓存后端)
    python manage.py clearcache
    
  • 验证数据库权限与迁移状态
    确保postgres用户拥有mydb的全部权限:

    -- 进入PostgreSQL命令行执行
    GRANT ALL PRIVILEGES ON DATABASE mydb TO postgres;
    

    同时确认mydb已完成迁移:

    python manage.py migrate --database=default
    
  • 重置数据库连接
    旧数据库重建后可能存在残留连接,重启PostgreSQL服务彻底清除:

    sudo systemctl restart postgresql
    

额外建议

  • 生产环境不要随意删除正在使用的数据库,切换数据库时应先完成新库的迁移,再修改配置,最后重启服务。
  • 建议用环境变量管理数据库配置,避免硬编码在settings.py中,示例:
    import os
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': os.environ.get('DB_NAME'),
            'USER': os.environ.get('DB_USER'),
            'PASSWORD': os.environ.get('DB_PASSWORD'),
            'HOST': 'localhost',
            'PORT': '5432',
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 04:16:02