为什么pymongo的find_one会默默地失败? (nginx的/ uwsgi /烧瓶/ GEVENT / pymongo)

时间:2014-10-17 22:49:42

标签: nginx flask pymongo uwsgi gevent

摘要: Pymongo似乎在我的flask + gevent + uwsgi + nginx app中无缘无故地失败了。我会喜欢一些关于我应该看的地方的指示

我是网络应用程序编程的新手(和python),请耐心等待。我将应用程序从Heroku移植到OpenStack提供程序,并且发现在前者上工作正常的代码在后者上间歇性地和无声地失败。我想知道是否有人可以对此有所了解。

这是有问题的功能:

emergencies是一个pymongo Collection。这是正确实例化的。

user_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到25行工作正常,我假设第27行被调用。但我得到没有。第29行(except:案例)和第30行都没有运行。

最奇怪的是,白天有时候这根本不是问题,而且效果很好。在这些情况下,它看起来更像这样(添加行号以便于参考):

成功案例

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]...'}

我还没有能够隔离任何东西使它工作。它令人发狂,我不知道下一步该去哪看。

我尝试过的一些事情

我读过一些文章,表明我需要在我的导入中添加from gevent import monkey; monkey.patch_all()行;我做到了。

我还读过你不能在多线程中使用uwsgi + gevent,所以我的uwsgi配置了1个线程。

TL;博士 在我的flask + gevent + uwsgi + nginx app中,Pymongo似乎无缘无故地失败了。我会喜欢一些关于我应该看的地方的指示

1 个答案:

答案 0 :(得分:0)

我记得我们是如何解决这个问题的。 requirements.txt中的pymongo版本已经过时了。我把它更新到最新版本,之后很好。