AberSheeran
Aber Sheeran
I know nothing except the fact of my ignorance.

Uvicorn 部署 Django 导致连接丢失

起笔自
所属文集: 杂记
共计 755 个字符
落笔于

当使用 Uvicorn 一类的 ASGI Server 驱动 Django 的时候会偶发性的出现如下错误:

django.db.utils.OperationalError: (2006, 'MySQL server has gone away')

这一点在 Github 上被证实:uvicorn#292daphne#248channels#1234

其根本原因是 Django 为了复用 MySQL 的连接,会把连接保存在连接池中,当保存时间超过了数据库设置的连接超时时间后,再次使用该连接就会导致出现这一问题。

参考 [email protected] 可以得到对于这一问题的非侵入式解决办法。也就是为 Django 增加一个中间件:

from django.db import close_old_connections


def clear_old_connections_middleware(get_response):
    """
    Clean up the failed db connection before the request starts 
    or after the response ends
    """
    def middleware(request):
        close_old_connections()
        response = get_response(request)
        close_old_connections()
        return response

    return middleware
如果你觉得本文值得,不妨赏杯茶
搭建自己的 PyPi 镜像
没有下一篇