2012-07-16 12 views
20

Deseo implementar dos aplicaciones django diferentes en el mismo host: la primera corresponderá a la url/sitio1 y la segunda a la url/sitio2. Aquí está mi configuración:Implementación de varias aplicaciones de django en 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> 

También aquí está el archivo wsgi.py tanto para aplicaciones

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

Ahora, aquí está mi problema. Cuando voy a mi servidor, digamos http://app1.sites.gr/site1, algunas veces carga site1, y otras veces carga site2 !!!! Lo mismo ocurre cuando visito http://app1.sites.gr/site2 ... Sometiems obtengo la página de bienvenida para el sitio1, ¡a veces obtengo la página de bienvenida para el sitio2! Estoy presionando F5 y obtengo diferentes páginas de bienvenida. He comprobado todo para las horas previas y no encontrar nada extraño ...

Por favor, dime lo que podría ser el problema antes de que me vuelvo loco ...

Gracias!

Respuesta

41

Se trata de un problema con el archivo generado por wsgi.py Django 1.4. No funcionará cuando intente alojar dos instancias de Django distintas en el mismo proceso, aunque en subinterpretadores por separado.

Cambio:

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

a:

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

O mejor aún, utilizar el modo demonio y delegar cada uno para funcionar en grupos de procesos daemon distintas.

Es decir, en lugar de:

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} 

ACTUALIZACIÓN

en cuenta que hay un blog entero sobre esta y otras causas ahora.

+2

Esto realmente funcionó, ¡gracias! Sin embargo, ahora tengo otro problema: cuando intento visitar ambos sitios en el mismo navegador, a veces me desconecta de site2 (cuando visito el sitio1), pero no al revés ... ¿Podría ser porque tengo/site1 y/sitio2? ¿Debería probar lo que Erik propone y tener site1.sites.gr y site2.sites.gr? – Serafeim

+3

Debe establecer SESSION_COOKIE_NAME o SESSION_COOKIE_PATH de forma diferente para cada sitio, ya que se encuentran bajo el mismo dominio. Ver http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango –

2

Sus aplicaciones se escuchan en el mismo puerto, y no parece haber un proxy que las delegue en otras.

Usted tiene que VirtualHosts de configuración dentro de Apache o Nginx utiliza, lighttpd o algo más para crear un proxy adecuado

+0

¿No puedo delegar en el script correcto a través de la url diferente (site1 vs site2) ???? ¡No quiero usar diferentes puertos ni configurar un proxy!Solo quiero ejecutar dos aplicaciones django en el mismo host apache. He leído en otro lugar que esto es posible :( – Serafeim

+3

Sí, para eso están los hosts virtuales, readthedocs –

+0

Así que debería ejecutar mis dos sitios usando gunicorn en diferentes puertos y luego simplemente agregar el siguiente "ProxyPass/site1 http://127.0.0.1:8111/ ProxyPassReverse/site1 http://127.0.0.1:8111/" para ambos sitios en mi httpd.conf ?? – Serafeim

1
respuesta de

Graham Dumpleton es el que es probable que desee leer más cercano, pero sugeriría ahorrándose una gran cantidad de la acidez estomacal al alojamiento de su dos Djangos en la raíz de diferentes subdominios en lugar de en ubicaciones no root en el mismo dominio. Hay muchos problemas para ejecutar sitios de Django que no sean root en mi humilde opinión.

¡Buena suerte!

+2

Bueno, después de alrededor de 8 meses de uso de producción (no pesado), con cuatro sitios diferentes (/ site1,/site2, site3 y site4), todo funciona realmente bien (¡sí, incluso sesiones con la configuración SESSION_COOKIE_NAME)! Lo único que debes recordar es no usar URLs absolutas, pero solo a través de revese y {% url%}, después de todo, eso es django-DRY-way :) – Serafeim

Cuestiones relacionadas