修补django以在失败之前首先重试数据库连接。
django-dbconn-retr的Python项目详细描述
django数据库连接自动重新连接
这个库monkeypatchesdjango.db.backends.base.BaseDatabaseWrapperso 当数据库操作失败时,因为底层的TCP连接是 已经关闭,它首先尝试重新连接,而不是立即启动 一个OperationException。
为什么这个有用?
我使用HAProxy作为postgresql数据库前面的负载平衡器 时间,有时除了pgbouncer。即使你可以 通过tcpka启用tcp keep alive包来防止意外, clitcpka和srvtcpka,我仍然会遇到 已通过负载平衡器关闭基础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到INSTALLED_APPS在settings.py中。
信号
库提供了一个接口,供其他代码插入到进程中, 例如,允许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 保留所有权利。
以源和二进制形式重新分配和使用,有无 如果满足以下条件,则允许修改:
- 重新发布源代码必须保留上述版权声明 条件列表和以下免责声明。
- 二进制形式的再分配必须复制上述版权声明, 文件中的条件列表和以下免责声明 和/或分发时提供的其他材料。
- 无论是著作权人的名字还是作者的名字 可用于认可或推广从本软件衍生的产品 未经事先书面许可。
本软件由版权所有者和贡献者“按原样”提供,并且 任何明示或默示保证,包括但不限于 对特定用途的适销性和适合性的保证 否认。在任何情况下,版权持有人或贡献者均不承担责任 对于任何直接的、间接的、偶然的、特殊的、惩戒性的或间接的 损害赔偿(包括但不限于购买替代货物或 但是 根据任何责任理论,无论是在合同中,严格责任, 或因使用而引起的侵权行为(包括疏忽或其他) 即使被告知有可能造成这种损害。