Развертывание нескольких приложений django на Apache с помощью mod_wsgi
Я хочу развернуть два разных приложения django на одном хосте: Первый будет соответствовать URL/сайту1, а второй - URL/site2. Здесь моя конфигурация:
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 для обоих приложений
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()
Теперь, вот моя проблема. Когда я иду на свой сервер, скажем http://app1.sites.gr/site1, он несколько раз загружает сайт1, а иногда он загружает сайт2!!!! То же самое происходит при посещении http://app1.sites.gr/site2... Sometiems Я получаю приветственную страницу для сайта1, иногда я получаю страницу приветствия для сайта2! Я нажимаю F5 и получаю разные приветственные страницы. Я проверил все за предыдущие часы и не нашел ничего странного...
Пожалуйста, скажите мне, что может быть проблемой, прежде чем я сойду с ума...
Спасибо!
Ответы
Ответ 1
Это проблема с файлом 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
Ваши приложения прослушивают один и тот же порт, и, похоже, нет прокси-сервера, который делегирует их другим.
Вам либо нужно настроить VirtualHosts в apache, либо использовать Nginx, lighttpd или что-то еще, чтобы создать правильный прокси
Ответ 3
Ответ Graham Dumpleton - это тот, который вы, вероятно, захотите прочитать ближе всего, но я бы предложил сэкономить много изжоги, разместив ваши два Djangos в корне разных поддоменов, а не в местах без корней в том же домене. Есть много исправлений для запуска не-корневых сайтов Django IMHO.
Удачи!