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

DigitalOcean上Django+Gunicorn无论Debug设置均触发500错误

排查 Django + Gunicorn + NGINX 突发全量500错误(无有效Gunicorn错误日志)

老兄,这种突然翻车的情况真的闹心——明明用了好几年的配置突然炸锅,全量500还不给正经错误日志,太折磨人了。结合你描述的现象,我给你列几个优先级最高的排查方向,都是我之前踩过的坑:

  • 先锁定自定义500模板的加载问题
    你提到Gunicorn只报模板目录的404,这大概率是关键线索。先确认你的500.html是不是在正确的位置:Django找自定义错误模板的规则是templates/[你的应用名]/500.html或者全局的templates/500.html。会不会是最近部署时误删了模板文件?或者权限出问题了?
    可以用这个命令验证Gunicorn运行用户能不能访问模板:

    sudo -u [gunicorn运行用户,比如www-data] ls /path/to/你的项目/templates/500.html
    

    如果返回“No such file or directory”,那就是文件丢了或者路径错了;如果权限报错,就给目录加权限:sudo chmod -R 755 /path/to/你的项目/templates。

  • 强制让Django输出详细错误日志,别等Gunicorn
    既然Gunicorn没输出有用的错误,直接在Django的settings.py里配置独立的错误日志,把所有服务器端错误打到文件里:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'django_error': {
                'level': 'ERROR',
                'class': 'logging.FileHandler',
                'filename': '/var/log/django/prod_error.log',
            },
        },
        'loggers': {
            'django': {
                'handlers': ['django_error'],
                'level': 'ERROR',
                'propagate': True,
            },
        },
    }
    

    先创建日志目录并给权限:

    sudo mkdir /var/log/django && sudo chown [gunicorn运行用户]:[gunicorn运行用户] /var/log/django
    

    然后重启Gunicorn和Nginx,访问页面后去看这个日志,绝对能抓到真正的错误原因——500肯定是服务器端有问题,只是没打出来而已。

  • 验证Django项目本身能不能正常运行
    脱离Gunicorn,直接用Django自带的runserver测试(临时用,测试完立刻关掉):

    python manage.py runserver 0.0.0.0:8000
    

    然后直接访问服务器IP:8000,看看会不会弹出详细的错误栈。如果runserver也报500,那问题就在Django项目本身:比如最近有没有更新依赖?数据库连接是不是断了?可以进shell测试数据库:

    python manage.py shell
    

    然后执行个简单查询:from django.contrib.auth.models import User; User.objects.first(),如果报错,那就是数据库的问题(比如DigitalOcean的托管DB突然断开,或者账号权限变了)。

  • 检查Gunicorn的进程和配置
    会不会是Gunicorn进程挂了或者配置被误改?先重启Gunicorn看看:

    sudo systemctl restart gunicorn
    

    然后看状态:sudo systemctl status gunicorn,有没有启动失败的提示。另外检查Gunicorn配置文件里的chdir是不是正确的项目根目录,pythonpath是不是指向你的虚拟环境Python路径——有时候部署时不小心改了配置,自己都没注意到。

内容的提问来源于stack exchange,提问作者Dave Merwin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:15:30