生产环境下Django settings.py修改未生效问题求助
看起来你碰到了部署后Django配置不生效的典型坑——Nginx只是反向代理,真正跑Django应用的是WSGI服务器(比如Gunicorn、uWSGI),重启Nginx根本不会让Django加载新的配置!我来给你一步步排查解决:
重启Django的WSGI服务(核心操作!)
Nginx只负责转发HTTP请求,实际运行Django代码的是Gunicorn/uWSGI这类服务,你必须重启它们才能让新的settings.py生效:- 如果用Gunicorn+systemd管理:
sudo systemctl restart gunicorn.service # 要是没装systemd,就先找进程再平滑重启 ps aux | grep gunicorn sudo kill -HUP <你的Gunicorn进程ID> - 如果用uWSGI:
sudo systemctl restart uwsgi.service # 或者用uWSGI的pid文件重载 uwsgi --reload /path/to/your/uwsgi.pid
- 如果用Gunicorn+systemd管理:
忽略无效的apachectl操作
你提到执行了apachectl restart,但服务器用的是Nginx部署,这个命令完全没用(甚至可能报错,如果没装Apache的话),直接忽略就行。确认你修改的是正确的settings.py文件
有时候会出现本地改了文件,但服务器运行的Django用的是另一个路径下的配置!可以用Django Shell验证当前加载的配置:python manage.py shell >>> import django.conf >>> print(django.conf.settings.SETTINGS_MODULE) # 看当前用的是哪个settings >>> print(django.conf.settings.EMAIL_HOST) # 验证是不是你新改的SMTP地址如果输出的是旧配置,说明你改错了文件,找到服务器上实际运行的项目目录再修改。
彻底清理缓存文件
虽然你删了.pyc文件,但__pycache__目录里可能还有残留,彻底清理:find /path/to/your/django/project -name "__pycache__" -type d -exec rm -rf {} \;要是Django开启了第三方缓存(比如Redis、Memcached),也建议清空缓存:
python manage.py clearcache验证SMTP配置本身的正确性
重启服务后,用Django Shell直接测试SMTP连接,确认新配置能正常工作:python manage.py shell >>> from django.core.mail import send_mail >>> send_mail( ... '测试邮件', ... '这是验证SMTP配置的测试邮件', ... '你的发件邮箱@example.com', ... ['收件邮箱@example.com'], ... fail_silently=False, ... )如果这里成功发送,说明配置没问题,只是之前没重启WSGI服务;如果还是报错,那可能是SMTP配置本身有问题(比如密码错误、端口/SSL设置不对)。
内容的提问来源于stack exchange,提问作者Jiroscopes

