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
相关产品推荐
相关产品推荐

