स्केपी स्थापित करने के बाद गैर-उत्तरदायी एपाचे + mod_wsgi


10

मैं वर्तमान में अपाचे 2.2.15 और mod_wsgi 3.2 के साथ एक Centos 6.4 सर्वर चला रहा हूं। सर्वर एक django- आधारित साइट (django 1.5.1, पायथन 2.6.6) की मेजबानी कर रहा है। सब कुछ ठीक चल रहा था जब तक कि मैं पाइप के माध्यम से स्कैपी 0.12.0 स्थापित नहीं करता। अब, जब मैं django ऐप को लोड करने का प्रयास करता हूं, तो सर्वर प्रतिक्रिया नहीं देता है, और ऐसा प्रतीत होता है कि बच्चे httpd प्रक्रियाएं जो स्पैन हैंग हैं। मेरे लॉग (/ var / log / httpd / error_log, my vhost error.log और मेरे सिस्टम लॉग) के माध्यम से देखने से कोई त्रुटि नहीं होती है।

अगर मैं django manage.py शेल के माध्यम से अपने मॉडल आदि को लोड करता हूं, तो सब कुछ ठीक काम करता है, जो मुझे विश्वास दिलाता है कि यह एक mod_wsgi समस्या है।

यह कैसे समस्या निवारण शुरू करने के बारे में कोई विचार?

जवाबों:


22

पायथन के लिए कुछ तीसरे पक्ष के पैकेज जो सी एक्सटेंशन मॉड्यूल का उपयोग करते हैं, और इसमें स्केपी और सुन्नता शामिल है, केवल पायथन मुख्य दुभाषिया में काम करेगा और डिफ़ॉल्ट उपयोग द्वारा mod_wsgi के रूप में उप दुभाषियों में उपयोग नहीं किया जा सकता है। परिणाम थ्रेड गतिरोध, गलत व्यवहार या प्रक्रिया क्रैश हो सकता है। ये विस्तृत हैं:

http://code.google.com/p/modwsgi/wiki/ApplicationIssues#Python_Simplified_GIL_State_API

वर्कअराउंड का उपयोग करते हुए प्रक्रिया के मुख्य दुभाषिया में WSGI एप्लिकेशन को चलाने के लिए मजबूर करना है:

WSGIApplicationGroup %{GLOBAL}

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


हाय ग्राहम, क्या आप mod-wsgi के अधिक हाल के संस्करणों के संदर्भ में इस उत्तर को अपडेट कर सकते हैं? विशेष रूप से, क्या यह डिफ़ॉल्ट रूप से एक समस्या माना जाता है अगर मैंने mod_wsgi-express का उपयोग करके अपाचे को कॉन्फ़िगर किया है? उत्पन्न httpd.confफ़ाइल में, WSGIApplicationGroupउपयोग नहीं किया जाता है। हालांकि, वहाँ है application-group=${GLOBAL}में <IfDefine ONE_PROCESS>और <IfDefine !ONE_PROCESS>ब्लॉक। मैं उत्पन्न httpd.confफ़ाइल में एक WSGIDaemonProcess निर्देश देखता हूं । इसका मतलब यह है कि यह पहले से ही डिफ़ॉल्ट रूप से डेमॉन मोड का उपयोग कर रहा है?
काल

यदि आप mod_wsgi-express start-servermod_wsgi- एक्सप्रेस के लिए Django एकीकरण का उपयोग करते हैं, तो यह डिमॉन मोड के साथ डिफ़ॉल्ट रूप से चलता है और मुख्य दुभाषिया का उपयोग करता है। तो यह उस मामले में कोई समस्या नहीं है। यदि आप मैन्युअल रूप से अपाचे को कॉन्फ़िगर करते हैं, तो अभी भी एक मुद्दा है। यह ONE_PROCESSहिस्सा केवल तब होता है जब आप इसे डिबग मोड में डालते हैं, जिस स्थिति में यह सिंगल प्रोसेस एम्बेडेड मोड में चलता है। यह अभी भी मुख्य दुभाषिया में चलता है।
ग्राहम डम्पलटन

application-groupपर विकल्प WSGIScriptAliasका उपयोग करने के लिए एक विकल्प है WSGIApplicationGroup
ग्राहम डम्पलटन

3

WSGI को कॉन्फ़िगर करने के मेरे तरीके को फिट करने वाला एक और समाधान WSGIScriptAliasलाइन बदल रहा था:

WSGIDaemonProcess website user=user group=group python-path=/path/to/venv/website:/path/to/venv/lib/python2.7/site-packages
WSGIScriptAlias /website /path/to/venv/website/wsgi.py process-group=website application-group=%{GLOBAL}

<Location /website>
        WSGIProcessGroup website
</Location>

<Directory /path/to/venv/website>
        WSGIScriptReloading On
        <Files wsgi.py>
                Allow from all
                Require all granted
        </Files>
</Directory>

विशेषताओं पर ध्यान दें

process-group=website application-group=%{GLOBAL}

जो आमतौर पर आवश्यक नहीं होते हैं


1
आप WSGIScriptReloading निर्देश को छोड़ सकते हैं क्योंकि उस पर चूक और आमतौर पर कभी भी बंद करने की आवश्यकता नहीं होगी। WSGIScriptAlias ​​में प्रक्रिया-समूह विकल्प का उपयोग करने के कारण, आप WSGIProcessGroup निर्देश भी छोड़ सकते हैं।
ग्राहम डम्पलटन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.