Вставка Python не отображает трассировку ошибок

Я настроил проект Django, размещенный на Dreamhost, используя Passenger WSGI в соответствии с их вики-инструкциями, и столкнулся с проблемой появления внутренних ошибок и сбоя mod_wsgi.

Я установил Python Paste, следуя их инструкциям, чтобы на веб-странице отображались подробные журналы, но это не работает. IE: всякий раз, когда у меня возникают внутренние ошибки, я все равно получаю страницу "внутренних ошибок" django без какой-либо другой информации в браузере.

Когда я тестировал установку пасты, удаляя "test" перед "def testapplication", это работало нормально. Но всякий раз, когда у меня возникает внутренняя ошибка, я все равно не получаю вывод пасты с полной информацией об ошибке. Вместо этого я получаю ту же загадочную страницу с внутренней ошибкой без информации.

Согласно их вики, моя конфигурация верна:

Мой файл passenger_wsgi.py:

import os, sys
import django.core.handlers.wsgi

INTERP = os.path.join(os.environ['HOME'], 'env', 'bin', 'python')
if sys.executable != INTERP:
    os.execl(INTERP, INTERP, *sys.argv)

os.environ['DJANGO_SETTINGS_MODULE'] = "abc.settings"

sys.path.append(os.getcwd())
sys.path.append(os.path.join(os.getcwd(), 'abc'))
log = file('/home/abcadmin/passengerwsgi.log', 'a')
print >>log, "Running %s" % (sys.executable)

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

from paste.exceptions.errormiddleware import ErrorMiddleware
sys.stdout = sys.stderr

# remove the "test" below to test paste
def testapplication(environ, start_response):
    status = '200 OK'
    output = 'Hello World! Running Python version ' + sys.version + '\n\n'
    response_headers = [('Content-type', 'text/plain'),
               ('Content-Length', str(len(output)))]
    # to test paste's error catching prowess, uncomment the following line
    # while this function is the "application"
    raise("error")
    start_response(status, response_headers)    
    return [output]

application = ErrorMiddleware(application, debug=True)

Мой журнал ошибок веб-сервера (error.log) пуст, и мой журнал доступа (access.log) полон сообщений, подобных следующему (последняя строка - отредактирована с поддельными ссылками). Где-то происходит регистрация, потому что access.log что-то регистрирует, но ошибки нигде не отображаются - кроме как на этой загадочной странице "Внутренняя ошибка".

46.246.117.3 - - [21/Feb/2012:00:27:04 -0800] "GET /admin/ HTTP/1.1" 200 2326 "http://abc.acme.com/admin/userProfile/profile/16/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:10.0.2) Gecko/20100101 Firefox/10.0.2"

Проект Django хорошо работает в моей среде разработки, но возникает некоторая проблема с сервером, когда он запускается на сервере Passenger WSGI на сервере - я установил Paste, чтобы попытаться отладить эти ошибки. Когда моя установка сталкивается с какой-либо ошибкой, не связанной с Django, я получаю это загадочное сообщение "внутренняя ошибка".

2 ответа

Решение

Я тоже потерпел неудачу с вставкой в ​​этом контексте, но для проблем с настройкой wsgi на сервере - этот вопрос может быть о такой проблеме - см. Методы отладки, которые, я думаю, являются "официальным" документом modwsgi. Выполните поиск в этом документе "Для более сложных проблем" и попробуйте бесплатный код промежуточного программного обеспечения, который находится непосредственно под этим абзацем, но исправьте синтаксическую ошибку в pprint.pprint((status, headers)+args), stream=self.__oheaders), заменив его на pprint.pprint(((status, headers)+args), stream=self.__oheaders).

Я также изменил классы на "новые классы", добавив "(объект)" к объявлению класса... извините, но сейчас я забываю, имеет ли это смысл или нет.

С этим промежуточным программным обеспечением вы получите полные заголовки запросов и ответов, а также контент, как все это происходит в приложении и из вашего приложения.

Я также счел целесообразным использовать встроенные в Djano улучшения ведения журналов Python, которые реализованы с использованием параметра LOGGING в settings.py. Вот документы.

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

Другие вопросы по тегам