Не удается разрешить исключение mod_wsgi в настройках Django

Я работаю с моим хостинг-провайдером, чтобы запустить приложение Django, но никто из нас не очень опытен, и мы в основном достигли полного тупика.

У меня нет прямого доступа к файлу conf, но вот как его содержимое было описано мне:

<IfModule mod_wsgi.c>
WSGIScriptAlias /fredapp/ /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi
WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup fred
WSGIApplicationGroup %{GLOBAL}
</IfModule>

Alias /robots.txt /home/fred/public_html/fred-site/robots.txt
Alias /favicon.ico /home/fred/public_html/fred-site/favicon.ico

Alias /settings/media/ /home/fred/public_html/fred-site/media/

Мой "django.wsgi" script ничего фантастического:

import os, sys
sys.path.append('/home/fred/public_html/cgi-bin/')
sys.path.append('/home/fred/public_html/cgi-bin/fredapp/')
os.environ['DJANGO_SETTINGS_MODULE'] = 'fredapp.settings'

import django.core.handlers.wsgi

application = django.core.handlers.wsgi.WSGIHandler()

Итак, я понимаю, что все это означает, что если запрос поступает для domain.com/fredapp/, он должен быть передан приложению через django.wsgi. Тем не менее, единственный ответ, который я получаю:

[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/500.shtml
[Fri Jan 22 18:46:08 2010] [error] [client xx.xxx.xx.xx] mod_wsgi (pid=26760): Exception occurred processing WSGI script '/home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi'.
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain.com/404.shtml
[Fri Jan 22 18:46:03 2010] [error] [client xx.xxx.xx.xx] File does not exist: /home/fred/public_html/domain

Это работает под Apache в Linux. Я попытался запустить каждую строку .wsgi script в интерпретаторе Python на сервере, и никто из них не возвратит никаких ошибок. Я также попробовал трюк sys.stdout = sys.stderr и не получил никакого выхода, кроме того, что выше. Файл не существует. Ошибки связаны с остальной частью настройки сайта и происходят по любому запросу. Я еще не закончил настройку правильно (страницы ошибок и индексные страницы и т.д.), Потому что я просто пытаюсь запустить приложение.

Я получил это приложение и работал под Apache на своей собственной машине, хотя НЕ в режиме Daemon, но это мое первое приложение Django, и я не думаю, что мой хостинг-провайдер когда-либо настраивал его раньше, я летел немного слепой. Если у кого есть какие-то предложения, я буду очень благодарен. Спасибо!

Ответы

Ответ 1

Если приведенная вами конфигурация - это то, что вы используете, ошибка на самом деле очевидна. У вас есть:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup scratchf

Это должно быть:

WSGIDaemonProcess fred threads=15 display-name=%{GROUP} python-path=/home/fred/public_html/cgi-bin/fredapp/apache/
WSGIProcessGroup fred

То есть имя группы процессов должно совпадать.

Вы должны увидеть сообщение об ошибке:

No WSGI daemon process called 'scratchf' has been configured

Вероятно, это будет до зарегистрированной ошибки:

Exception occurred processing WSGI script

Вот почему важно, чтобы вы отправляли все сообщения журнала ошибок и не предполагали, что они не актуальны.

В качестве альтернативы вы указали конфигурацию, отличную от того, что вы используете или не все настройки.


ОБНОВЛЕНИЕ 1

Похоже, что в Apache можно включить директиву ErrorDocument, чтобы перенаправить ошибки на определенный URL-адрес. Поскольку, однако, вы установили Django в корневом веб-сервере и не исключили, чтобы эти URL-адреса ошибок были переданы в Django, тогда при возникновении ошибки Django получает перенаправление для документа с ошибкой, но не может разрешить URL-адрес, а затем создает 404. Поскольку Apache видел 404 для переадресации страницы ошибки, он затем возвращает страницу ошибок по умолчанию 500. Конечным результатом является то, что истинная исходная ошибка и любая информация теряются.

Таким образом, перейдите в конфигурацию Apache и закомментируйте директивы ErrorDocument.


ОБНОВЛЕНИЕ 2

Измените конфигурацию на:

WSGIScriptAlias /fredapp /home/fred/public_html/cgi-bin/fredapp/apache/django.wsgi

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

Ответ 2

Возможно ли, что ваш стартовый каталог не является одним из проектов?

Сегодня я также настраивал Apache + mod_wsgi + приложение Django и после добавления в django.wsgi:

 os.chdir('/home/user/my_django_project')

все начало работать как шарм.

Ответ 3

У нас была такая же ошибка, когда пользователь, работающий с Apache, не имел права читать файлы.