2012-07-16 17 views
20

के साथ अपाचे पर एकाधिक django ऐप्स को तैनात करना मैं उसी मेजबान में दो अलग-अलग django ऐप्स को तैनात करना चाहता हूं: पहला यूआरएल/साइट 1 और दूसरा यूआरएल/साइट 2 से मेल खाता है। दोनों अनुप्रयोगोंmod_wsgi

 
import os 
import sys 

path = '/var/www/py/site1' 
if path not in sys.path: 
    sys.path.append(path) 

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings") 
from django.core.wsgi import get_wsgi_application 
application = get_wsgi_application() 

अब के लिए

 
LoadModule wsgi_module modules/mod_wsgi.so 

WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py 
WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py 

WSGIPythonPath /var/www/py/site1:/var/www/py/site2 

<Directory "/var/www/py/site1/site1"> 
<Files wsgi.py> 
Order deny,allow 
Allow from all 
</Files> 
</Directory> 

<Directory "/var/www/py/site2/site2"> 
<Files wsgi.py> 
Order deny,allow 
Allow from all 
</Files> 
</Directory> 

इसके अलावा यहां wsgi.py फ़ाइल है, यहाँ मेरी समस्या है: यहाँ मेरी विन्यास है। जब मैं अपने सर्वर पर जाता हूं, तो मान लें कि http://app1.sites.gr/site1 यह कुछ बार साइट 1 लोड करता है, और कुछ अन्य बार यह साइट 2 लोड करता है !!!! वही होता है जब मैं http://app1.sites.gr/site2 पर जाता हूं ... साइटमैम्स मुझे साइट 1 के लिए स्वागत पृष्ठ मिलता है, कभी-कभी मुझे साइट 2 के लिए स्वागत पृष्ठ मिलता है! मैं एफ 5 मार रहा हूं और अलग-अलग स्वागत पृष्ठ प्राप्त कर रहा हूं। मैं पिछले घंटे के लिए सब कुछ जाँच की है और कुछ भी अजीब नहीं मिला ...

कृपया, मुझे बताओ कि समस्या हो सकती है इससे पहले कि मैं पागल हो ...

धन्यवाद!

उत्तर

41

यह wsgi.py Django 1.4 द्वारा उत्पन्न फ़ाइल के साथ एक समस्या है बनाने के लिए। यह काम नहीं करेगा जहां एक ही प्रक्रिया में दो अलग Django उदाहरणों की मेजबानी करने की कोशिश कर रहा है, भले ही अलग उप दुभाषियों में।

बदलें:

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "site1.settings") 

रहे हैं:

os.environ["DJANGO_SETTINGS_MODULE"] = "site1.settings" 

या बेहतर अभी भी डेमॉन मोड का उपयोग करें और अलग डेमॉन प्रक्रिया समूहों में चलने के प्रत्येक प्रतिनिधि।

है यही कारण है, के बजाय:

WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py 
WSGIScriptAlias /site2 /var/www/py/site2/site2/wsgi.py 

WSGIPythonPath /var/www/py/site1:/var/www/py/site2 

उपयोग:

WSGIDaemonProcess site1 python-path=/var/www/py/site1 
WSGIScriptAlias /site1 /var/www/py/site1/site1/wsgi.py process-group=site1 application-group=%{GLOBAL} 

WSGIDaemonProcess site2 python-path=/var/www/py/site2 
WSGIScriptAlias /site2 /var/www/py/site1/site2/wsgi.py process-group=site2 application-group=%{GLOBAL} 

अद्यतन

नोट इस और अन्य कारणों के बारे में एक पूरी ब्लॉग पोस्ट अब नहीं है।

+2

यह वास्तव में काम किया, धन्यवाद! हालांकि मुझे अब एक और समस्या है: जब मैं एक ही ब्राउज़र में दोनों साइटों पर जाने का प्रयास करता हूं, तो कभी-कभी मुझे साइट 2 से बाहर लॉग आउट करता है (जब मैं साइट 1 पर जाता हूं) - लेकिन इसके विपरीत नहीं ... ऐसा इसलिए हो सकता है क्योंकि मेरे पास/site1 और/साइट 2? क्या मुझे एरिक का प्रस्ताव देने की कोशिश करनी चाहिए और साइट 1.sites.gr और site2.sites.gr है? – Serafeim

+3

आपको प्रत्येक साइट के लिए अलग-अलग डोमेन के रूप में SESSION_COOKIE_NAME या SESSION_COOKIE_PATH सेट करने की आवश्यकता है। Http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango –

2

आपके ऐप्स एक ही बंदरगाह पर सुनते हैं, और ऐसा प्रतीत नहीं होता है जो उन्हें अलग-अलग लोगों को सौंपता है।

आप या तो अपाचे भीतर सेटअप VirtualHosts करने के लिए है या Nginx, lighttpd या कुछ और का उपयोग एक उचित प्रॉक्सी

+0

क्या मैं विभिन्न यूआरएल (साइट 1 बनाम साइट 2) के माध्यम से उचित स्क्रिप्ट पर प्रतिनिधि नहीं भेज सकता ???? मैं अलग-अलग बंदरगाहों का उपयोग नहीं करना चाहता हूं या प्रॉक्सी कॉन्फ़िगर नहीं करना चाहता!मैं सिर्फ एक ही अपाचे होस्ट पर दो django ऐप्स चलाने के लिए चाहता हूं - मैंने कहीं और पढ़ा है कि यह संभव है :( – Serafeim

+3

हां वर्चुअलहोस्ट्स के लिए यह है, readthedocs –

+0

तो क्या मुझे अपनी बंदरगाहों को बंदरगाह का उपयोग करके दो बंदरगाहों को चलाया जाना चाहिए और फिर बस जोड़ना चाहिए निम्न "ProxyPass/site1 http://127.0.0.1:8111/ ProxyPassReverse/site1 http://127.0.0.1:8111/" मेरे httpd.conf पर दोनों साइटों के लिए ?? – Serafeim

1

ग्राहम Dumpleton की प्रतिक्रिया एक तो आप शायद सबसे करीब पढ़ना चाहते है, लेकिन मैं बजाय अपने आप को विभिन्न उप डोमेन की जड़ में अपने दो Djangos होस्टिंग द्वारा असंतोष का एक बहुत बचत सुझाव है एक ही डोमेन पर गैर रूट स्थानों। गैर रूट रूट Django साइट्स IMHO चलाने के लिए बहुत सारे मिलचास हैं।

शुभकामनाएं!

+2

देखें, चार अलग-अलग साइटों (/ साइट 1,/साइट 2, साइट 3 और साइट 4) के साथ, लगभग 8 महीने (भारी नहीं) उत्पादन के उपयोग के बाद, सबकुछ वास्तव में बहुत अच्छा काम कर रहा है (हाँ, SESSION_COOKIE_NAME सेटिंग के साथ भी सत्र)! याद रखने की एकमात्र चीज पूर्ण यूआरएल का उपयोग नहीं करना है, बल्कि केवल revese और {% url%} के माध्यम से - django-DRY-way के बाद :) – Serafeim

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