摘要: 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似乎无缘无故地失败了。我会喜欢一些关于我应该看的地方的指示
答案 0 :(得分:0)
我记得我们是如何解决这个问题的。 requirements.txt中的pymongo版本已经过时了。我把它更新到最新版本,之后很好。