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

django-dbconn-retr的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包来防止意外, clitcpkasrvtcpka,我仍然会遇到 已通过负载平衡器关闭基础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_retryINSTALLED_APPSsettings.py中。

信号

库提供了一个接口,供其他代码插入到进程中, 例如,允许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第三方库


热门话题
java Jetty是否有请求缓存?   数组中的java 2值与我的数据帧中的2列对应   对象序列化期间的java DbUtils类型转换问题   java根面板中不显示所有单独的面板   java通过代理或SSH隧道连接Hbase API   java困惑:与经典MVC控制器相比,JSF2中bean的角色   java在我的Triangle类中“找不到符号错误”   java在Android中设置从路径到自定义按钮的图像   java不绕轨道旋转椭圆   AES在socket上搞砸了序列化/反序列化。无效的流标头。JAVA   java在数组中搜索term和if语句   线程“main”java中出现异常。util。正则表达式。PatternSyntaxException:在索引0附近悬挂元字符“*”*   Websphere上的java Google反射无法打开url连接   java为什么inc/dec频道什么都不做?   java KeyListener无法访问keyPressed方法