Actualmente estoy usando dos aplicaciones de Django (digamos A
& B
) alojadas en el mismo dominio (pero se sirven en diferentes puertos) a través de Apache. Creo que mi configuración es correcta, pero estoy obteniendo al azar 500 en ambos sitios. El 500 en A
(por ejemplo, decir) se produce principalmente después de que se haya notificado una solicitud en B
(y viceversa).Varios sitios usando Django y mod_wsgi en Apache
Al inspeccionar el registro de errores (de, digamos, por ejemplo A
), veo que A
'módulo wsgi s está intentando acceder a B
' s settings.py
archivo (que obviamente no sucede a estar allí, ya que las rutas de proyecto son diferente) [y esto sucede a la inversa, el wsgi de B plantea una excepción que se queja de la falta del archivo settings.py de A]. No estoy seguro de por qué buscarían el otro archivo de configuración, las importaciones (para settings.py) en todas las vistas son específicas para los proyectos respectivos.
Aquí está mi configuración:
A
se está sirviendo en el puerto 8080
, B
se está sirviendo en el puerto 80
.
VirtualHost:
<VirtualHost *:8080>
ServerAdmin [email protected]
ServerName string1
Alias /static/ /home/PATH_TO_PROJECT_A/static/
<Directory /home/PATH_TO_PROJECT_A/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias//home/PATH_TO_PROJECT_A/wsgi.py
<Directory /home/PATH_TO_PROJECT_A>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
LogLevel warn
ErrorLog /SOME_PATH/errorA.log
CustomLog /SOME_PATH/accessA.log combined
</VirtualHost>
<VirtualHost *:80>
ServerName string1
ServerAdmin [email protected]
Alias /APP_B/static/ /home/PATH_TO_PROJECT_B/static/
<Directory /home/PATH_TO_PROJECT_B/static>
Order deny,allow
Allow from all
</Directory>
WSGIScriptAlias /APP_B /home/PATH_TO_PROJECT_B/wsgi.py/
<Directory /home/PATH_TO_PROJECT_B>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>
ErrorLog /home/SOME_PATH/error2.log
CustomLog /home/SOME_PATH/access2.log combined
# All other files on B:80 (other than /APP_B are served normally
DocumentRoot /home/foo/public_html/xyz/public
</VirtualHost>
ports.conf:
NameVirtualHost *:8080
Listen 8080
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
wsgi.py en 'A':
import os, sys
sys.path.append('home/PATH_TO_PROJECT_A') #1
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "PROJECT_A.settings") #2
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Y exactamente igual en B, con los cambios en la línea # 1 y # 2.
error que recibo de la error.log
decir por ejemplo de A
:
[Sun Aug 26 17:01:49 2012] [error] [client x] Traceback (most recent call last):
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 219, in __call__
[Sun Aug 26 17:01:49 2012] [error] [client x] self.load_middleware()
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 39, in load_middleware
[Sun Aug 26 17:01:49 2012] [error] [client x] for middleware_path in settings.MIDDLEWARE_CLASSES:
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/utils/functional.py", line 184, in inner
[Sun Aug 26 17:01:49 2012] [error] [client x] self._setup()
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 42, in _setup
[Sun Aug 26 17:01:49 2012] [error] [client x] self._wrapped = Settings(settings_module)
[Sun Aug 26 17:01:49 2012] [error] [client x] File "/usr/local/lib/python2.7/dist-packages/django/conf/__init__.py", line 95, in __init__
[Sun Aug 26 17:01:49 2012] [error] [client x] raise ImportError("Could not import settings '%s' (Is it on sys.path?): %s" % (self.SETTINGS_MODULE, e))
[Sun Aug 26 17:01:49 2012] [error] [client x] ImportError: Could not import settings 'PROJECT_B.settings' (Is it on sys.path?): No module named PROJECT_B.settings
Como se puede ver A
's registro de errores se queja de que B
' s settings.py
no se encuentra. Por favor, arroja algo de luz, no tengo idea de qué pasa. No veo por qué una aplicación buscaría el archivo settings.py del otro para importar?
Ambas aplicaciones funcionan y se ejecutan como se esperaba, pero se rompen en solicitudes aleatorias que atienden al 500 (que se borra si actualizo de nuevo).
¡Gracias!
Por cierto, esta otra [pregunta] (http://stackoverflow.com/questions/9581197/two-django-projects-running-simultaneously-and-mod-wsgi-acting-werid) presenta un ejemplo práctico de Graham mismo de usar grupos de procesos daemon separados. Me ayudó mucho, ¡obtuviste mis votos, Graham! –
todavía no funcionará para mí. ¿Puedes decirme porque?todavía 404 página – user2771714
No asuma que tiene el mismo problema y no espere que las personas sean lectores mentales. Crea una pregunta separada y detalla exactamente cuál es tu problema. –