В настоящее время я использую два приложения Django (скажем, A
и B
), размещенные в одном домене (но обслуживаемые на разных портах) через Apache. Я считаю, что мои настройки верны, но я случайно получаю 500 на обоих сайтах. 500 на A
(скажем, например) происходит в основном после того, как запрос был обслужен на B
(и наоборот).
Изучив журнал ошибок (например, A
), я вижу, что модуль wsgi A
пытается получить доступ к файлу settings.py
B
(которого, очевидно, там нет, поскольку пути проекта разные) [и это действительно происходит с другой стороны, wsgi B вызывает исключение, жалуясь на отсутствие файла settings.py A]. Я не уверен, зачем им искать другой файл настроек, импорт (для settings.py) во всех представлениях специфичен для соответствующих проектов.
Вот моя установка:
A
обслуживается через порт 8080
, B
обслуживается через порт 80
.
Виртуальный хост:
<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>
порты.conf:
NameVirtualHost *:8080
Listen 8080
Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>
<IfModule mod_gnutls.c>
Listen 443
</IfModule>
wsgi.py на «А»:
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()
И точно так же на B, с изменениями в строке №1 и №2.
Ошибка, которую я получаю от error.log
, например, от 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
Как вы видите, журнал ошибок A
жалуется, что settings.py
B
отсутствует. Пожалуйста, пролейте немного света, я понятия не имею, что не так. Я не понимаю, почему одно приложение будет искать файл settings.py другого для импорта?
Оба приложения работают и выполняются, как и ожидалось, но они прерываются при случайных запросах, обслуживающих 500 (которые очищаются, если я снова обновляю).
Спасибо!