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

Django中settings.py无法更新最新数据库配置问题求助

排查思路与解决方法

1. 确认代码部署路径的正确性

  • 登录EC2服务器,直接查看应用运行目录下的settings.py,用命令快速验证数据库配置:cat /path/to/your/app/settings.py | grep -A 10 DATABASES,确认配置确实是RDS的信息,而非Hostinger的。
  • 排查部署脚本是否存在异常,比如代码被部署到了错误目录,或者旧代码包未被覆盖。

2. 排查环境变量覆盖配置

很多Python项目会通过环境变量覆盖settings.py中的数据库配置,你需要:

  • 检查settings.py是否有类似DATABASES['default']['HOST'] = os.environ.get('DB_HOST', 'default-value')的代码。
  • 查看EC2当前用户的环境变量:echo $DB_HOST、echo $DB_USER、echo $DB_PASSWORD,确认是否是旧的Hostinger信息。
  • 检查supervisor/gunicorn的启动配置文件,看是否在environment字段中注入了旧的数据库环境变量。

3. 验证虚拟环境的代码一致性

如果项目使用虚拟环境,可能存在修改了系统路径下的代码,但应用实际运行在虚拟环境副本的情况:

  • 确认gunicorn启动命令指向的虚拟环境路径,比如supervisor配置中的command字段是否为/path/to/venv/bin/gunicorn ...。
  • 进入对应虚拟环境,查看项目目录下的settings.py是否为最新配置。

4. 清理框架级配置缓存

如果是Django这类框架,除了手动删除缓存文件,还可以执行框架自带的缓存清理命令:python manage.py clearcache,强制刷新配置缓存。

  • 同时排查是否有自动化配置工具(如Ansible)在后台同步旧配置,导致手动修改的settings.py被覆盖。

5. 直接测试数据库连接

在EC2上运行以下脚本,测试两个数据库的连通性,同时观察应用数据写入的目标库,确认实际连接对象:

import mysql.connector

# 测试RDS连接
try:
    conn = mysql.connector.connect(
        host='你的RDS地址',
        user='RDS用户名',
        password='RDS密码',
        database='RDS数据库名'
    )
    print("已成功连接RDS")
    conn.close()
except Exception as e:
    print(f"RDS连接失败: {e}")

# 测试Hostinger连接
try:
    conn = mysql.connector.connect(
        host='旧Hostinger地址',
        user='旧Hostinger用户名',
        password='旧Hostinger密码',
        database='旧Hostinger数据库名'
    )
    print("已成功连接Hostinger")
    conn.close()
except Exception as e:
    print(f"Hostinger连接失败: {e}")

6. 彻底重启gunicorn进程

有时候gunicorn的旧进程未被完全杀死,仍在使用旧配置运行:

  • 用ps aux | grep gunicorn列出所有相关进程,执行kill -9 <进程ID>手动杀死所有进程,再重启supervisor/gunicorn。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 09:57:12