Не удается разрешить исключение 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, не имел права читать файлы.