2012-07-16 13 views
20

Voglio distribuire due diverse app django nello stesso host: la prima corrisponderà all'URL/site1 e la seconda all'URL/site2. Ecco la mia configurazione:Distribuzione di più app django su Apache con mod_wsgi

 
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> 

ecco anche il file wsgi.py per entrambe le applicazioni

 
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() 

Ora, qui è il mio problema. Quando vado al mio server, diciamo http://app1.sites.gr/site1, alcune volte carica site1 e altre volte carica site2 !!!! Lo stesso vale quando visito lo http://app1.sites.gr/site2 ... Qualche volta ottengo la pagina di benvenuto per site1, a volte ottengo la pagina di benvenuto per site2! Sto colpendo F5 e ricevendo diverse pagine di benvenuto. Ho controllato tutto per le ore precedenti e non ha trovato nulla di strano ...

Ti prego, dimmi che cosa potrebbe essere il problema prima di andare pazzo ...

Grazie!

risposta

41

Questo è un problema con il file generato da wsgi.py Django 1.4. Non funzionerà dove tentare di ospitare due distinte istanze di Django nello stesso processo, anche se in subinterpreti separati.

Cambio:

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

a:

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

O meglio ancora utilizzare la modalità demone e delegare ogni per l'esecuzione in distinti gruppi di processo daemon.

Cioè, invece di:

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 

uso:

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} 

UPDATE

Nota che c'è un post intero su questa e altre cause ora.

+2

Questo ha funzionato davvero, grazie! Tuttavia ho un altro problema ora: quando provo a visitare entrambi i siti nello stesso browser, a volte mi disconnette da site2 (quando visito site1) - ma non il contrario ... Potrebbe essere perché ho/site1 e/sito2? Dovrei provare cosa propone Erik e avere site1.sites.gr e site2.sites.gr? – Serafeim

+3

È necessario impostare SESSION_COOKIE_NAME o SESSION_COOKIE_PATH in modo diverso per ogni sito poiché si trovano nello stesso dominio. Vedi http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango –

2

Le tue app ascoltano la stessa porta e sembra che non ci sia un proxy che le deleghi a quelle diverse.

O si deve VirtualHosts di configurazione all'interno Apache o Nginx usare, lighttpd o qualcos'altro per creare una vera e propria delega

+0

Impossibile delegare allo script corretto tramite l'URL diverso (sito1 vs sito2) ???? Non voglio usare porte diverse o configurare un proxy!Voglio solo eseguire due app di django sullo stesso host apache - Ho letto altrove che è possibile :( – Serafeim

+3

Sì, questo è ciò che sono per i virtualhosts, readthedocs –

+0

Quindi dovrei eseguire i miei due siti utilizzando gunicorn su porte diverse e quindi basta aggiungere il seguente "ProxyPass/site1 http://127.0.0::11111/ ProxyPassReverse/site1 http://127.0.0.1:8111/" per entrambi i siti sul mio httpd.conf ?? – Serafeim

1
risposta di

Graham Dumpleton è quella che probabilmente desidera leggere più vicino, ma vorrei suggerire risparmiando un sacco di bruciore di stomaco ospitando il vostro due Djangos alla radice di sottodomini diversi, piuttosto che a posizioni non root sullo stesso dominio. Ci sono un sacco di trucchi per l'esecuzione di siti Django non-root IMHO.

Buona fortuna!

+2

Bene, dopo circa 8 mesi di utilizzo (non pesante) della produzione, con quattro siti diversi (/ site1,/site2, site3 e site4), tutto sta funzionando davvero bene (sì, anche sessioni con l'impostazione SESSION_COOKIE_NAME)! L'unica cosa da ricordare è non usare mai url assoluti ma solo attraverso revese e {% url%} - dopotutto questo è il modo django-DRY :) – Serafeim

Problemi correlati