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 и т.д.
Ответ 2
Наконец, я нашел решение. Это проблема нескольких версий Python: http://code.google.com/p/modwsgi/wiki/InstallationIssues#Multiple_Python_Versions.
Спасибо всем!: P
Ответ 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