2014-10-17 55 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版本很舊。我將它更新到最新版本,並且在那之後很好。