Django, apache, mod_wsgi - Ошибка: преждевременный конец заголовков скриптов - PullRequest
12 голосов
/ 21 декабря 2010

Apache регистрирует в режиме отладки:

[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 admin@mysite.com

   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.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 Но я все еще не понимаю решения.

Ответы [ 6 ]

10 голосов
/ 21 декабря 2010

Сбой процесса демона. См. Комментарии в FAQ по mod_wsgi о причинах сбоев:

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

и переходите по ссылкам туда.

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

4 голосов
/ 16 октября 2012

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

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

4 голосов
/ 22 декабря 2010

Наконец-то я нашел решение.Это проблема нескольких версий Python: http://code.google.com/p/modwsgi/wiki/InstallationIssues#Multiple_Python_Versions.

Спасибо всем!: P

0 голосов
/ 13 июня 2013

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

AddHandler cgi-script .py

0 голосов
/ 16 октября 2012

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

0 голосов
/ 22 декабря 2010

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

WSGISocketPrefix /tmp/wsgi

А это

WSGIDaemonProcess mysite processes=5 threads=25
WSGIProcessGroup mysite

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

...