mongoengine 0.4,django 1.3.1,uwsgi 1.0.2.1
一直把我的头撞在墙上。我有一个使用 mongoengine 的 Django 应用程序。mongodb 服务器与我的应用程序服务器不同,某些事情(防火墙规则更改等)会导致连接丢失。
在这种情况下,我想实现处理自动重新连接,以便我的整个应用程序在/如果发生这种情况时不会崩溃。我正在尝试这些方面的东西:http: //pastebin.com/HE8LSp5v(注意这不是我的代码,尽管我尝试修改它以使其工作但没有成功)
该 pastebin 中的代码将成功检测到故障并尝试重新连接,但 for 循环通常不会重复多次,所以你看到的是每秒多次重新连接尝试,我猜每个 uwsgi 线程一次.
所以我稍微修改了代码(改为https://gist.github.com/1723790)并将其放在我的 settings.py 文件的底部。uwsgi 和开发服务器的结果是一样的,所以为了简单起见,我将在这里使用开发服务器。
启动开发服务器,我得到:
SETTING OVERRIDES
SETTING OVERRIDES DONE
WRAPPER ENTRY
WRAPPER ENTRY
SETTING OVERRIDES
SETTING OVERRIDES DONE
SETTING OVERRIDES
SETTING OVERRIDES DONE
WRAPPER ENTRY
WRAPPER ENTRY
SETTING OVERRIDES
SETTING OVERRIDES DONE
Validating models...
0 errors found
Django version 1.3.1, using settings 'mucs.settings'
Development server is running at http://0.0.0.0:80/
Quit the server with CONTROL-C.
随着 mongoengine 的运行,我访问了一个向其中发出一些请求的页面。工作正常。然后我关闭 mongodb 并刷新页面。我在屏幕上打印出这样的东西:
(REQUEST IS STARTED)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
WRAPPER ENTRY
PyMongo auto-reconnecting... could not connect to mucs-content:27017: [Errno 111] Connection refused. Waiting 0.5 seconds. (Attempt 0)
WRAPPER ENTRY
[...]
这种情况一直如此,直到我重新启动 mongodb,此时页面正确呈现并且一切正常。我不想将此代码投入生产,因为我不确定这里到底发生了什么。看起来它可能正在递归到循环中,并且没有将发生的 AutoReconnect 异常正确地拉回。我想接下来要尝试的可能是检查每个操作的堆栈以确切了解发生了什么。