Подтвердить что ты не робот

Развертывание нескольких приложений 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 и получаю разные приветственные страницы. Я проверил все за предыдущие часы и не нашел ничего странного...

Пожалуйста, скажите мне, что может быть проблемой, прежде чем я сойду с ума...

Спасибо!

4b9b3361

Ответ 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.

Удачи!