Django, apache, mod_wsgi - Ошибка: недопустимый конец заголовков script

Apache регистрируется в режиме debug:

[Tue Dec 21 11:36:33 2010] [info] [client 1.53.149.114] mod_wsgi (pid=24831, process='mysite', application='mysite.com|'): Loading WSGI script '/home/anhtran/webapps/mysite.com/django.wsgi'.
[Tue Dec 21 11:36:33 2010] [error] [client 1.53.149.114] Premature end of script headers: django.wsgi
[Tue Dec 21 11:36:33 2010] [notice] child pid 24831 exit signal Segmentation fault (11)
[Tue Dec 21 11:36:33 2010] [info] mod_wsgi (pid=24980): Attach interpreter ''.

Мой файл conf:

WSGISocketPrefix /tmp/wsgi

<VirtualHost *:80>
   ServerName mysite.com
   ServerAlias www.mysite.com
   ServerAdmin [email protected]

   DocumentRoot /home/anhtran/webapps/mysite.com/public_html

   WSGIDaemonProcess mysite processes=5 threads=25
   WSGIProcessGroup mysite
   WSGIScriptAlias / /home/anhtran/webapps/mysite.com/django.wsgi

   LogLevel debug

   <Directory /home/anhtran/webapps/mysite.com/mysite>
      Order allow,deny
      Allow from all
   </Directory>

</VirtualHost>

Django отлично работает в базовом проекте без подключения к данным, например MySQLdb или sqlite3. Я использую CentOS 5 64 бит, apache 2.x, mod_wsgi 3.2. Я думаю, что это не проблема Django, но я понятия не имею. Все могут это исправить? Помоги мне. Благодарю!:)

django.wsgi

#!/usr/local/bin/python
import os, site, sys

# add the virtual environment path
site.addsitedir('/home/anhtran/webapps/mysite.com/env/lib/python2.6/site-packages')
site.addsitedir('/home/anhtran/webapps/mysite.com/mysite')
site.addsitedir('/home/anhtran/webapps/mysite.com')

# fix markdown.py (and potentially others) using stdout
sys.stdout = sys.stderr

#Calculate the path based on the location of the WSGI script.
project = os.path.dirname(__file__)
workspace = os.path.dirname(project)
sys.path.append(workspace)

os.environ['PYTHON_EGG_CACHE'] = '/home/anhtran/webapps/mysite.com/.python-eggs'
os.environ['DJANGO_SETTINGS_MODULE'] = 'mysite.settings'
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()

Я прочитал несколько вопросов по этой ссылке: http://code.google.com/p/modwsgi/wiki/FrequentlyAskedQuestions Но я до сих пор не понимаю решения.

Ответ 1

Процесс демона разбился. См. Комментарии в mod_wsgi Часто задаваемые вопросы о том, что вызывает сбои:

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

и следуйте ссылкам.

В конечном итоге причиной может быть множество вещей, включая загрузку несовместимого mod_python в одно и то же время, с использованием модуля расширения Python C, который не работает с суб-интерпретаторами, несовместимыми версиями разделяемой библиотеки, используемыми Apache и/или модулями расширения в PHP и т.д.

Ответ 3

У меня была аналогичная проблема для django, apache2, mod_wsgi, python2.6, установленных на виртуальной машине. Я решил проблему, вызвавшую помеху, назначенную виртуальной машине.

Надеюсь, это поможет.

Ответ 4

Попробуйте удалить это

WSGISocketPrefix /tmp/wsgi

И этот

WSGIDaemonProcess mysite processes=5 threads=25
WSGIProcessGroup mysite

На моем сервере это работает.

Ответ 5

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

show processlist;

в приглашении MySQL, я вижу, что запросы резервируются в очереди. Если я убью запрос вверху, все остальные открытые процессы немедленно завершатся, и мой сайт снова оживает.

Надеюсь, это поможет кому-то другому. Вы также можете запустить

show full processlist;

чтобы увидеть точный запрос. В моем случае это был запрос django select_related, в котором было создано множество предложений INNER JOIN в запросе.

Смотрите: http://dev.mysql.com/doc/refman/5.1/en/show-processlist.html

Ответ 6

моя же проблема была решена следующим образом: удалите cgi configure, который был добавлен мной когда-нибудь:

AddHandler cgi- script.py