Ошибка 500 с WSGI в Джанго - PullRequest
       8

Ошибка 500 с WSGI в Джанго

3 голосов
/ 02 декабря 2011

Я развертываю свой первый в истории проект Django, и у меня возникает ощущение, что я очень близок, но мне просто нужна помощь, чтобы переступить черту. Вот проблема:

Мои изменения httpd.conf выглядят так:

WSGIScriptAlias / /home/miketnc/frontend/tncsite/wsgi.py
WSGIPythonPath /home/miketnc/frontend/tncsite

<Directory /home/miketnc/frontend/tncsite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

Пока все хорошо, скрипт "hello world" в wsgi.py работает просто отлично. Проблема возникает, когда я использую рекомендованный Django сценарий wsgi:

import os, sys

sys.path.append('/home/miketnc/frontend/tncsite')
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "tncsite.settings")

from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()

Это вызывает ошибку 500:

File "/home/miketnc/frontend/tncsite/wsgi.py", line 10, in ?
mod_wsgi (pid=15494): Exception occurred processing WSGI script '/home/miketnc/frontend/tncsite/wsgi.py'.
mod_wsgi (pid=15494): Target WSGI script '/home/miketnc/frontend/tncsite/wsgi.py' cannot be loaded as Python module.

Вся поддержка, которую я видел в этой ошибке, относится к неправильным установкам в apache, не к поиску модулей и т. Д., Чего не может быть, если запущен «hello world».

Есть идеи?

UPDATE

После перезапуска на новом сервере мне удалось немного продвинуться вперед. Хорошая новость в том, что Python и WSGI, кажется, играют хорошо, плохая в том, что теперь я получаю ошибку 500 разного рода.

Единственная ошибка, которую я получаю в журнале: "[Пн. Дек 05 18:22:45 2011] [ошибка] [ip клиента] mod_wsgi (pid = 19804): Возникла исключительная ситуация при обработке сценария WSGI '/home/miketnc/frontend/tncsite/apache/wsgi.py'."

Сценарий Hello World по-прежнему работает нормально, триггер для ошибки - последняя строка:

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

Я установил все каталоги, содержащие проект, из frontend / down в 777, и добавил процесс демона под себя:

LoadModule wsgi_module /usr/local/apache/extramodules/mod_wsgi.so
AddHandler wsgi-script .wsgi

WSGIDaemonProcess miketnc processes=2 maximum-requests=500 threads=1
WSGIProcessGroup miketnc

WSGIScriptAlias / /home/miketnc/frontend/tncsite/apache/wsgi.py

<Directory /home/miketnc/frontend/tncsite>
<Files wsgi.py>
Order deny,allow
Allow from all
</Files>
</Directory>

Кто-нибудь может посоветовать, как это работает?

Ответы [ 2 ]

4 голосов
/ 02 декабря 2011

В вашем случае:

WSGIPythonPath /home/miketnc/frontend/tncsite

является избыточным, так как вы устанавливаете sys.path в файле сценария WSGI.

Что вам не хватает, так это добавление родительского каталога сайта:

sys.path.append('/home/miketnc/frontend')

Это дополнение к существующей строке с добавлением '/home/miketnc/frontend/tncsite'.

Читать:

http://code.google.com/p/modwsgi/wiki/IntegrationWithDjango

и часы:

http://code.google.com/p/modwsgi/wiki/WhereToGetHelp?tm=6#Conference_Presentations

которые говорят о путях и разрешениях.

3 голосов
/ 06 декабря 2011

решаемая.

Я не осознавал, что журнал ошибок в Cpanel - это небольшая часть выходных данных Apache журнала ошибок. Когда я просмотрел логи Apache, проблема стала очевидной. В этом случае MySQLdb не был настроен должным образом.

Я работал над этим, внося некоторые изменения в .python-eggs, и теперь все в порядке.

Спасибо за ответы и, в частности, спасибо Грэму за работу, которую вы вложили в WSGI.

...