2012-04-21 13 views
38

चलाते समय अप्रत्याशित रूप से क्रैश हो जाता है। मैं this site से django-on-twisted स्क्रिप्ट का उपयोग करके एक django एप्लिकेशन चला रहा हूं।ट्विस्टेड सर्वर django

सभी अनुरोधों को एक nginx सर्वर द्वारा परोसा जाता है जो मोड़ने के लिए प्रॉक्सी प्रासंगिक अनुरोधों को उलट देता है। मेरे पास एक एपीआई के लिए एक यूआरएल सेटअप है, जो मूल रूप से केवल अनुरोध प्राप्त करता है और प्रतिक्रिया भेजने से पहले पैरामीटर प्राप्त करने पर कुछ प्रसंस्करण करता है। हालांकि, जब कोई विशिष्ट ग्राहक एपीआई को मार रहा है, तो मुड़ता हुआ सर्वर बस बंद हो जाता है।

the.ip.of.client - - [21/Apr/2012:11:30:36 -0400] "GET /api/url/?get=params&more=params HTTP/1.1" 499 0 "-" "Java/1.6.0_24" 

मुड़ लॉग लेकिन मुड़ इस बिंदु पर काम कर बंद हो जाता है कुछ भी नहीं दिखाई देते हैं: नीचे चिपकाया गया Nginx लॉग है। त्रुटि कोड 49 9 द्वारा, मुझे लगता है कि क्लाइंट ने अप्रत्याशित रूप से कनेक्शन बंद कर दिया है, जिसके साथ मुझे कोई समस्या नहीं है। क्या ग्राहक को प्रतिक्रिया प्राप्त होती है या नहीं, मेरे लिए महत्वपूर्ण नहीं है।

def api_url(request): 
    if request.GET: 
     get_param = request.GET.get('get', [''])[0] 
     more_param = request.GET.get('more', [''])[0] 
     #some processing here based on the get params 
     return HttpResponse('OK') 
    else: 
     raise Http404 

ग्राहक से अनुरोध एक वैध अनुरोध है और एक प्रतिकूल ढंग से प्रसंस्करण को प्रभावित नहीं करता: यहाँ प्रासंगिक Django दृश्य है। मैंने इसे खोल से परीक्षण किया है। जब मैंने django विकास सर्वर पर कोशिश की, तो यह अनुरोध प्राप्त करने के किसी भी निशान को छोड़ दिए बिना भी उसी तरह दुर्घटनाग्रस्त हो गया। ब्राउजर से परीक्षण करते समय सब कुछ पूरी तरह से अच्छा काम करता है। साथ ही, मुड़ता हुआ सर्वर सभी नियमित उपयोग मामलों के लिए अच्छा काम करता है। यह पहली बार है जब मुझे इसके साथ कोई समस्या आ रही है। किसी भी मदद या पॉइंटर्स की सराहना की जाएगी।

+1

क्या करता है "बंद हो जाता है" क्या मतलब है? क्या यह साफ से बाहर निकलता है? क्या सिग्नल इसे बाहर निकलने का कारण बनता है? –

+0

घुमावदार सर्वर लॉग में कुछ भी नहीं लिखता है। मुझे पूरा यकीन है कि यह एक साफ निकास नहीं है। यह सिर्फ काम करना बंद कर देता है। किसी भी विचार के बारे में मैं कैसे बाहर निकलने संकेत प्राप्त करने में सक्षम हो सकता है? – tapan

+6

यदि आप बैश का उपयोग कर रहे हैं, तो '$?' मदद करेगा। बैश मैन पेज से: **? सबसे हाल ही में निष्पादित अग्रभूमि पाइपलाइन की निकास स्थिति में विस्तार करता है। ** तो, उदाहरण के लिए, 'twistd ...; echo $? ' –

उत्तर

1

आरएफसी में कोई 49 9 http कोड नहीं है। Nginx 49 9 कोड खुद को परिभाषित करता है।

जब किसी ग्राहक ने अनुरोध भेजा, और प्रतिक्रिया के बिना कनेक्शन बंद कर दिया, तो एक 49 9 कोड होता है। यदि आपके access_log में बहुत से 49 9 हैं, तो यह ज्यादातर धीमी बैक-एंड के कारण होता है (आपके उपयोगकर्ताओं के लिए प्रतीक्षा करने के लिए बहुत धीमा)। आपको अपनी वेबसाइट के प्रदर्शन को अनुकूलित करना पड़ सकता है।

http://forum.nginx.org/read.php?2,213789,213794#msg-213794

+0

बैकएंड वास्तव में ठीक है। 49 9 एक बॉट के कारण होता है जो चर प्राप्त करने के माध्यम से बैकएंड पर डेटा डंप कर रहा है। यह अनुरोध भेजता है और तुरंत प्रतिक्रिया के इंतजार किए बिना कनेक्शन बंद कर देता है। यह स्वीकार्य व्यवहार है। मैं बस इसके कारण दुर्घटनाग्रस्त नहीं होना चाहता। मैं अब बंदूक का उपयोग कर रहा हूं और यह एक ही उपयोग के मामले के लिए पूरी तरह से काम करता है। – tapan

1
  • आप कहते हैं कि समस्या के बाद से यह gunicorn साथ आप के लिए काम करता है लेकिन django-ऑन-मुड़ नहीं, या तो स्क्रिप्ट नहीं है एक ग्राहक एक विशेष यूआरएल मार (प्रतिलिपि प्रस्तुत करने योग्य?)
  • से है ठीक से काम कर रहे हैं या twisted.web2 मुद्दा है।

कृपया $ sh init.sh yourdjangoproject stand आज़माएं।

आप भी SystemExit को पकड़ने के लिए run.py संशोधित करने के लिए कोशिश कर सकते हैं:

import pdb 
try: 
    # __main__ stuff here. 
except (KeyboardInterrupt, SystemExit): 
    pdb.set_trace() 
+0

उत्तर के लिए धन्यवाद! मैं वास्तव में इस परीक्षण की स्थिति में नहीं हूं क्योंकि हम पूरी तरह से नए वास्तुकला में चले गए हैं। लेकिन, मैं कुछ समय बाद इस विशिष्ट मामले के लिए एक पर्यावरण स्थापित करने और स्थापित करने की कोशिश करूंगा और देख सकता हूं कि आपका उत्तर मदद करता है या नहीं। – tapan

संबंधित मुद्दे