为什么pymongo';让我们静静地寻找一个失败的人吧?(nginx/uwsgi/flask/gevent/pymongo)

为什么pymongo';让我们静静地寻找一个失败的人吧?(nginx/uwsgi/flask/gevent/pymongo),nginx,flask,pymongo,uwsgi,gevent,Nginx,Flask,Pymongo,Uwsgi,Gevent,摘要:在我的flask+gevent+uwsgi+nginx应用程序中,Pymongo似乎无缘无故地默默失败。我想知道我应该去哪里 我是web应用程序编程(以及python)的新手,请耐心听我说。我正在将一个应用程序从Heroku移植到一个OpenStack提供商,我发现在前者上运行良好的代码在后者上间歇性地、无声地失败。我想知道是否有人能解释这一点 这就是所讨论的功能: emergencies是pymongo收藏。这是正确的实例化 user\u id是我要查找的用户id。没错 22 def g

摘要:在我的flask+gevent+uwsgi+nginx应用程序中,Pymongo似乎无缘无故地默默失败。我想知道我应该去哪里

我是web应用程序编程(以及python)的新手,请耐心听我说。我正在将一个应用程序从Heroku移植到一个OpenStack提供商,我发现在前者上运行良好的代码在后者上间歇性地、无声地失败。我想知道是否有人能解释这一点

这就是所讨论的功能:

emergencies
是pymongo收藏。这是正确的实例化

user\u id
是我要查找的用户id。没错

22 def get_emergency_by_user(user_id):
23     print "going to find emergency by user:"+user_id
24     print emergencies
25     print EmergencyDict.user_id
26     try:
27         emergency = emergencies.find_one({EmergencyDict.user_id: user_id})
28     except:
29         print 'mongo failed'
30     print 'this should appear'
31     print 'emergency - %s' % emergency
32     return emergency
以下是函数的输出(添加行号以便于参考):

故障案例

23 going to find emergency by user:UnitTestScript
24 Collection(Database(Connection('[redacted]', [redacted]), u'[redacted]'), u'emergencies')
25 userid
23 going to find emergency by user:UnitTestScript
24 Collection(Database(Connection('[redacted]', [redacted]), u'[redacted]'), u'emergencies')
25 userid
30 this should appear
31 {'_obj'...[a bunch of json representing the correct document]...'}
所以我可以看到第23行到第25行运行良好,我假设第27行被调用。但是我没有得到低于这一点的任何东西。第29行(除了:案例)和第30行都没有运行过

最奇怪的是,在白天的某些时候,这根本不是一个问题,而且它工作得非常完美。在这些情况下,它看起来更像这样(添加行号以便于参考):

成功案例

23 going to find emergency by user:UnitTestScript
24 Collection(Database(Connection('[redacted]', [redacted]), u'[redacted]'), u'emergencies')
25 userid
23 going to find emergency by user:UnitTestScript
24 Collection(Database(Connection('[redacted]', [redacted]), u'[redacted]'), u'emergencies')
25 userid
30 this should appear
31 {'_obj'...[a bunch of json representing the correct document]...'}
但我还没能分离出任何能让它工作的东西。真让人恼火,我不知道下一步该去哪里看

我尝试过的一些事情

我读过一些文章,建议我需要使用gevent import monkey的
;monkey.patch_all()
我的导入中的行;我已经这样做了

我还了解到,不能将uwsgi+gevent与多个线程一起使用,因此我的uwsgi配置为1个线程

tl;dr
Pymongo在我的flask+gevent+uwsgi+nginx应用程序中似乎无缘无故地失败了。我很想知道我应该去哪里

我刚刚想起我们是如何解决这个问题的。requirements.txt中的pymongo版本很旧。我把它更新到了最新的版本,之后就没事了

你有什么收获吗?我与uwsgi+pymongo之间存在问题,pymongo在从uwsgi运行时拒绝连接[errno 111]。恐怕我们最终离开了uwsgi,回到了Heroku。我不记得到底发生了什么。。。但是如果内存可用的话,问题就出在我的requirements.txt文件中。我用的是旧版本的。。。我想是皮蒙戈。我完全忘了这个问题!我会设法弄清楚那里发生了什么。