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

生产环境下Django settings.py修改未生效问题求助

解决Django SMTP配置修改后不生效的问题

看起来你碰到了部署后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
      
  • 忽略无效的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:45:30