修补Django以在失败之前先重试数据库连接。

django-dbconn-retry-coreteam的Python项目详细描述


Django数据库连接自动重新连接

https://coveralls.io/repos/github/jdelic/django-dbconn-retry/badge.svg?branch=HEADhttps://travis-ci.org/jdelic/django-dbconn-retry.svg?branch=master

这个库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_retrysettings.py中的{tt5}$到INSTALLED_APPS。在

信号

库提供了一个接口,供其他代码插入到进程中, 例如,允许12factor-vault刷新数据库凭据 在代码尝试重新建立数据库连接之前。这些是 使用Django Signals实现。在

SignalDescription
^{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 版权所有。在

以源代码和二进制形式重新分发和使用,有无 如果满足以下条件,则允许修改:

  1. 重新分发源代码必须保留上述版权声明,此 条件列表和以下免责声明。在
  2. 以二进制形式重新分发必须复制上述版权声明, 此条件列表和文档中的以下免责声明 和/或分发时提供的其他材料。在
  3. 既没有版权所有者的名字也没有它的贡献者的名字 可用于认可或推广来自此软件的产品 未经事先书面许可。在

本软件由版权所有人和贡献者“按原样”提供,并且 任何明示或暗示的保证,包括但不限于 适销性和适用于特定用途的保证 否认。在任何情况下,版权持有人或贡献者不承担任何责任 对于任何直接的、间接的、偶然的、特殊的、示范性的或后果性的 损害赔偿(包括但不限于采购替代货物或 服务;使用、数据或利润损失;或业务中断) 根据任何责任理论,无论是在合同中,严格责任, 或因使用而产生的侵权行为(包括疏忽或其他) 即使被告知有这种损坏的可能性。在

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
JavaGCP:一个VM可以位于具有相同地址的不同网络上吗?   java查找安卓中第一个数组的第二个数组中存在的元素的索引   java摄像头活动不工作,设置参数失败   用于python的Base64转换的Java等效代码   为什么JPA/Hibernate在我尝试运行@Query时抛出“java.lang.NegativeArraySizeException:1”?   如何在ubuntu for java的终端上设置路径?   java为什么这两个IP不同?   java JPA:如何将本机查询结果集转换为POJO类集合   java如何在|(12)|(23)中用数字拆分字符串   异常处理如何让程序在达到Java目标后停止运行   java如何不添加以特定字符开头的元素   java如何通过字符串获得swing按钮名称?   java如何在响应不成功时读取改装中的错误体?   java*更新*现在我的程序可以编译但不运行了?