Django / Wsgi / Apache выдает преждевременный конец ошибок скрипта, и ни одно из обычных решений не работает - PullRequest
1 голос
/ 06 февраля 2012

После очень стандартного и минорного выпуска наша установка Apache / Nginx / Django / wsgi перестала работать с ужасной

Преждевременный конец заголовков скриптов: django.wsgi

сообщение в журнале. Там нет нигде segfault и никаких других сообщений об ошибках.

Нет проблем с экспатом (проверено с помощью примера приложения wsgi с этим модулем и без него). Сервер работал нормально. Кодовая база была немного обновлена, и apache перезапустился, когда начались ужасы.

Вот мой файл wsgi:


import sys
import os

sys.path.append('/home/app/')
sys.path.append('/home/app/topmodule/')

os.environ['DJANGO_SETTINGS_MODULE'] = 'app.settings'
os.environ["CELERY_LOADER"] = "django"

import app.settings
import django.core.handlers.wsgi

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

Apache conf для этого сайта:


WSGIScriptAlias / /home/app/topmodule/django.wsgi
WSGIDaemonProcess app user=app group=app processes=6 threads=1
WSGIProcessGroup app

Я также попытался добавить:

WSGIApplicationGroup %{GLOBAL}

но там никакой помощи. Все, что я получаю, - это страница ошибок сервера Apache и эта чертова преждевременная ошибка в журнале ошибок

Я попытался откатить кодовую базу, но это тоже не принесло пользы, что заставляет меня подозревать, что это не новая проблема кода.

EDIT Я сузил segfault до строки в wsgi.py Джанго.

Трассировка:

http://paste.pocoo.org/show/546803/

Некоторые свалки:

http://paste.pocoo.org/show/546846/

Это происходит при запросе любого URL. Используемое промежуточное ПО:


    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware', 
    'django.middleware.gzip.GZipMiddleware',

Ответы [ 2 ]

0 голосов
/ 09 февраля 2012

В итоге я переустановил apache, mod wsgi и все связанные пакеты.В какой-то момент появилось предупреждение о том, что mod_wsgi был скомпилирован для Python 2.6.6, а среда выполнения - Python 2.6.4.Я перестроил Python с исходного кода на 2.6.6, и проблема была решена.Я не уверен, что это было второстепенное обновление версии или целое восстановление, которое исправило это.Я также не уверен, почему он работал до сих пор, и внезапно перестал работать, но, по крайней мере, теперь все в порядке.

0 голосов
/ 06 февраля 2012

Можете ли вы попробовать явно добавить путь django в ваш sys.path?

sys.path.append('/usr/local/lib/python2.6/site-packages/django')

(дважды проверьте, что это действительно так :))

...