Не удается устранить исключение mod_wsgi в настройке Django - PullRequest
14 голосов
/ 22 января 2010

Я работаю с моим хостинг-провайдером, чтобы запустить приложение 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" ничего особенного:

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 в интерпретаторе Python на сервере, и ни одна из них не вернула никаких ошибок.Я также попробовал трюк sys.stdout = sys.stderr и не получил ничего, кроме того, что указано выше.Файл не существует, ошибки связаны с остальной настройкой сайта и возникают при любом запросе.Я еще не закончил правильно все это настраивать (страницы ошибок и страницы индекса и т. Д.), Потому что я просто пытаюсь запустить само приложение.

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

Ответы [ 3 ]

18 голосов
/ 22 января 2010

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

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

Похоже, вы можете включить директиву ErrorDocument в Apache, чтобы перенаправлять ошибки на определенный 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, а не по корню веб-сервера.

1 голос
/ 22 января 2010

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

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

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

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

0 голосов
/ 22 января 2010

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

...