2011-07-06 19 views
39

के निर्देशन मैं दो (या अधिक) Django अनुप्रयोगों उपनिर्देशिका में एक ही डोमेन के तहत स्थापित किया, प्राप्त करने के लिए कोशिश कर रहा हूँ जैसे इस तरह एक अपाचे वर्चुअलहोस्ट स्थापित करके ठीक काम करता है:एक वर्चुअल होस्ट पर एकाधिक mod_wsgi क्षुधा गलत एप्लिकेशन

<VirtualHost *:80> 
    ... 
    WSGIScriptAlias /site1 /path/to/site1.wsgi 
    WSGIScriptAlias /site2 /path/to/site2.wsgi 
</VirtualHost> 

अब, मैंने सत्यापित किया है कि प्रत्येक साइट व्यक्तिगत रूप से काम करती है। लेकिन जब मैं दोनों तरफ से दौड़ने की कोशिश करता हूं, तो अपाचे मुझे जो भी साइट वर्कर प्रक्रिया पहले लोड करता है, भेजता है। उदाहरण:

  1. पुनः प्रारंभ अपाचे 6 धागे
  2. लोड example.com/site1/ की सेवा, सही पृष्ठ
  3. लोड example.com/site2/ मिलता है, मिलता है सही पृष्ठ के लिए कॉन्फ़िगर
  4. दोहराएँ 2 और 3 2 बार।
  5. उदाहरण /site1/ को बार-बार ताज़ा करें, इसे साइट से साइट पर चक्र देखें।

प्रभावशाली रूप से, किसी भी कार्यकर्ता प्रक्रियाओं के लिए प्रभावी रूप से, यह उन सभी को अनुरोध भेजता है जो किसी भी व्यक्ति को डब्लूएसजीआईस्क्रिप्ट एलीस निर्देश के बावजूद पहले हिट करते हैं। कोई फर्क नहीं पड़ता कि मैं क्या करता हूं (WSGIProcessGroup, डेमॉन मोड बनाम एम्बेडेड मोड, या निर्देश स्थापित करना) यह इस व्यवहार को प्रदर्शित करना जारी रखता है।

यदि कोई यह बता सकता है कि मैं यहां क्या कर रहा हूं, तो यह असाधारण होगा!

+0

क्या आप जब आप 'http://code.google.com/p/modwsgi/wiki/CheckingYourInstallation#Sub_Interpreter_Being_Used' में वर्णित है कि साथ WSGI स्क्रिप्ट फ़ाइलें की जगह मिलता है: VirtualHost, समस्या हल हो? –

उत्तर

48

मेरे पास एक ही अपाचे इंस्टॉल पर चलने वाले कई डब्लूएसजीआई ऐप्स हैं, और पाया कि सबसे आसान काम सिर्फ एक ही प्रक्रिया समूह है - प्रत्येक ऐप्स के लिए एक।

एक नकारात्मक पक्ष, वास्तव में दोनों (या अधिक) ऐप्स चलाने के लिए एक ही प्रक्रिया प्राप्त करने का प्रयास कर रहा है, यह है कि इससे थोड़ा अधिक निवासी स्मृति का उपयोग हो सकता है, इससे आप अन्यथा दूर हो सकते हैं। लेकिन यह उन्हें बहुत अच्छी तरह से अलग रखता है और परेशानी से बचाता है। और यह आपके लिए चिंता नहीं हो सकता है (यह मेरे लिए नहीं था)।

(यह शायद बुरा नहीं हो सकता है, वे बहुत सारे टेक्स्ट पेज साझा करने में सक्षम हो सकते हैं? यह सिर्फ बेवकूफ अटकलें है; मैंने इसे किसी भी तरह से सत्यापित नहीं किया है, क्योंकि मेरा सेटअप सभी स्मृति-भूखे नहीं था)

यहाँ मेरी httpd.conf में से कुछ के टुकड़े है, लगभग:

WSGIDaemonProcess khdx_wsgi user=galdosd group=galdosd maximum-requests=10000 
WSGIScriptAlias /khdx /home/galdosd/khdxweb/rel/khdx/apache/django.wsgi 
<Location /khdx> 
WSGIProcessGroup khdx_wsgi 
</Location> 

WSGIDaemonProcess sauron_wsgi user=galdosd group=galdosd maximum-requests=10000 
WSGIScriptAlias /sauron /home/galdosd/finalsauronweb/django-root/apache/django.wsgi 
<Location /sauron> 
WSGIProcessGroup sauron_wsgi 
</Location> 
+3

अधिकतम-अनुरोधों का उपयोग उत्पादन साइटों के लिए निराश किया जाता है जब तक कि आपके पास वास्तव में एक अप्रिय स्मृति रिसाव न हो जिसे आप तुरंत ठीक नहीं कर सकते। –

+1

शानदार! स्थान ब्लॉक के अंदर परिभाषित अलग प्रक्रिया समूहों ने काम किया। मेरा एकमात्र अफसोस यह है कि मैंने जल्द ही यहां नहीं पूछा ;-) –

+0

धन्यवाद, ग्राहम! क्या कभी-कभी देरी को फिर से शुरू करने की वजह से है? –

1

मुझे इस से परेशानी हुई है। अपाचे कॉन्फ़िगरेशन को सही तरीके से प्राप्त करने का प्रयास करने के बजाय, मैंने एक WSGIScriptAlias ​​का उपयोग करने के बजाय निर्णय लिया और डब्लूएसजीआई मिडलवेयर है जो सही अनुप्रयोगों के अनुरोधों को रूट करता है। मेरा कोड https://github.com/zhemao/flotilla पर है। मैंने इसका इतना परीक्षण नहीं किया है, इसलिए सावधानी के साथ इसका इस्तेमाल करें, लेकिन मुझे आशा है कि इससे मदद मिलती है।

+1

आप डीजेगो के एकल DJANGO_SETTINGS_MODULE पर्यावरण चर पर निर्भरता के कारण दो अलग-अलग Django साइटों के साथ ऐसा नहीं कर सकते हैं, वह मान जिसे एक अनुरोध से अगले अनुरोध में बदला नहीं जा सकता है। –

+0

ओह ठीक है, इसके बारे में भूल जाओ। –

10

डोमिंगो इग्नेसियो का जवाब मुझे सही रास्ते पर निर्धारित किया है। मैं इसे काम करने के बारे में एक महत्वपूर्ण तथ्य इंगित करना चाहता हूं: दो प्रक्रिया समूह के समान वर्चुअलहोस्ट के भीतर होना चाहिए। (यह उबंटू 12.04.3 एलटीएस, अपाचे 2.2.22 और पायथन में लिखे गए कुछ डब्लूएसजीआई ऐप्स के साथ मेरे परीक्षणों पर आधारित है।)

उदाहरण के लिए, यह मेरे लिए नहीं काम किया है, APP1 उपयोग करने की क्षमता है, लेकिन APP2 के लिए एक 404 त्रुटि में जिसके परिणामस्वरूप:,

<VirtualHost *> 
     WSGIDaemonProcess app1 user=someuser group=somegroup threads=5 
     WSGIScriptAlias /app1 /app1/app1.wsgi 

     <Location /app1> 
       WSGIProcessGroup app1 
     </Location> 
</VirtualHost> 

<VirtualHost *> 
     WSGIDaemonProcess app2 user=someuser group=somegroup threads=5 
     WSGIScriptAlias /app2 /app2/app2.wsgi 

     <Location /app2> 
       WSGIProcessGroup app2 
     </Location> 
</VirtualHost> 

मध्यम और टैग निकाला जा रहा है ताकि एक भी करने के लिए

<VirtualHost *> 
     WSGIDaemonProcess app1 user=someuser group=somegroup threads=5 
     WSGIScriptAlias /app1 /app1/app1.wsgi 

     <Location /app1> 
       WSGIProcessGroup app1 
     </Location> 

     WSGIDaemonProcess app2 user=someuser group=somegroup threads=5 
     WSGIScriptAlias /app2 /app2/app2.wsgi 

     <Location /app2> 
       WSGIProcessGroup app2 
     </Location> 
</VirtualHost>