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

