2014-10-17 63 views
0

摘要: Pymongo似乎无缘无故地在我的烧杯+ gevent + uwsgi + nginx应用程序中失败。我会喜欢一些我应该看的地方的指针为什么pymongo的find_one默默无闻? (nginx/uwsgi/flask/gevent/pymongo)

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

这是有问题的功能:

emergencies是pymongo集合。这已正确实例化。

user_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;博士 Pymongo似乎默默地消失在我烧瓶+ GEVENT + uwsgi + nginx的应用程序没有任何理由。我会喜欢一些我应该看的地方

+0

你有没有得到这个地方?我在uwsgi + pymongo遇到问题,pymongo提升* Connection从uwsgi运行时拒绝[errno 111] *。 – PureW 2015-02-26 22:07:28

+0

我们最终离开了uwsgi,回到了Heroku。我不记得到底发生了什么......但如果内存正常工作,问题出在我的requirements.txt文件中。我想,我正在使用旧版本的... pymongo。我完全忘了这个问题!我会尽力解决那里发生的事情。 – churowa 2015-03-03 20:05:59

回答

0

我只记得我们如何解决这个问题。 requirements.txt中的pymongo版本很旧。我将它更新到最新版本,并且在那之后很好。

相关问题