修补Django以在失败之前先重试数据库连接。
django-dbconn-retry-coreteam的Python项目详细描述
Django数据库连接自动重新连接
这个库monkeypatchesdjango.db.backends.base.BaseDatabaseWrapperso 当数据库操作失败时,因为基础TCP连接 已经关闭,它首先尝试重新连接,而不是立即升起 一个OperationException。在
为什么这个有用?
我使用HAProxy作为PostgreSQL数据库前面的负载平衡器 时间,有时除了pgbouncer。即使你能 通过tcpka启用TCP keep-alive数据包来防止意外, clitcpka和{a6},我仍然会遇到 基础TCP连接已通过负载平衡器关闭。最常见的 这导致
django.db.utils.OperationalError: server closed the connection unexpectedly This probably means the server terminated abnormally before or while processing the request.
这个库修补了Django,使其在失败之前尝试重新连接一次。在
另一个应用是在使用Hashicorp Vault时,其中 数据库连接的凭据可能随时过期,然后需要 从保险库刷新。在
如何安装?
只需使用pip install django-dbconn-retry将库拉入。然后加上 django_dbconn_retry到settings.py中的{tt5}$到INSTALLED_APPS。在
信号
库提供了一个接口,供其他代码插入到进程中, 例如,允许12factor-vault刷新数据库凭据 在代码尝试重新建立数据库连接之前。这些是 使用Django Signals实现。在
Signal | Description |
---|---|
^{tt8}$ | Installs a hook of the type ^{tt9}$ that will be called before the library tries to reestablish a connection. 12factor-vault uses this to refresh the database credentials from Vault. |
^{tt10}$ | Installs a hook of the type ^{tt9}$ that will be called after the library tried to reestablish the connection. Success or failure has not been tested at this point. So the connection may be in any state. |
许可证
版权所有(c)2018,Jonas Maurus 版权所有。在
以源代码和二进制形式重新分发和使用,有无 如果满足以下条件,则允许修改:
- 重新分发源代码必须保留上述版权声明,此 条件列表和以下免责声明。在
- 以二进制形式重新分发必须复制上述版权声明, 此条件列表和文档中的以下免责声明 和/或分发时提供的其他材料。在
- 既没有版权所有者的名字也没有它的贡献者的名字 可用于认可或推广来自此软件的产品 未经事先书面许可。在
本软件由版权所有人和贡献者“按原样”提供,并且 任何明示或暗示的保证,包括但不限于 适销性和适用于特定用途的保证 否认。在任何情况下,版权持有人或贡献者不承担任何责任 对于任何直接的、间接的、偶然的、特殊的、示范性的或后果性的 损害赔偿(包括但不限于采购替代货物或 服务;使用、数据或利润损失;或业务中断) 根据任何责任理论,无论是在合同中,严格责任, 或因使用而产生的侵权行为(包括疏忽或其他) 即使被告知有这种损坏的可能性。在
- 项目
标签: