Ошибка 500 без чего либо в логах apache - PullRequest
40 голосов
/ 04 ноября 2011

В настоящее время я разрабатываю приложение на основе flask.Он отлично работает, порождая сервер вручную, используя app.run().Я пытался запустить его через mod_wsgi сейчас.Странно, я получаю ошибку 500, и ничего в логах.Я немного исследовал, и вот мои выводы.

  • Вставка строки типа print >>sys.stderr, "hello" работает как ожидалось.Сообщение отображается в журнале ошибок.
  • При вызове метода без использования шаблона он работает просто отлично.Ошибка 500.
  • Использование простого шаблона также работает нормально.
  • НО , как только я запускаю доступ к базе данных внутри шаблона (дляпример зацикливания запроса) Я получаю сообщение об ошибке.

Моя интуиция говорит мне, что это SQLAlchemy, который выдает ошибку, и, возможно, некоторая конфигурация регистрации приводит к тому, что журнал в какой-то момент времени отбрасывается

Кроме того, для тестирования я использую SQLite.Насколько я помню, доступ к нему возможен только из одного потока.Так что, если mod_wsgi порождает больше потоков, это может привести к поломке приложения.

Я немного растерялся, потому что он прерывает работу только после mod_wsgi, что также, похоже, поглотит мои ошибки.Что я могу сделать, чтобы ошибки всплыли в apache error_log?

Для справки, код можно увидеть на этой постоянной ссылке github .

Ответы [ 3 ]

54 голосов
/ 04 ноября 2011

Оказывается, я не был полностью неправ. Исключение действительно бросило sqlalchemy. И поскольку он по умолчанию транслируется на stdout, mod_wsgi молча игнорирует его (насколько я могу судить).

Чтобы ответить на мой главный вопрос: как просмотреть ошибки, вызванные приложением WSGI?

Это на самом деле очень просто. Перенаправьте ваши журналы на stderr. Единственное, что вам нужно сделать, это добавить следующее в ваш скрипт WSGI:

import logging, sys
logging.basicConfig(stream=sys.stderr)

Теперь, это самая обыденная конфигурация логирования. Поскольку я еще ничего не поставил на место для своего заявления, это подойдет. Но, думаю, когда приложение созреет, у вас все равно будет более сложная конфигурация регистрации, так что это вас не укусит.

Но для быстрой и грязной отладки это подойдет просто.

0 голосов
/ 29 мая 2015

У меня была похожая проблема: случайная «Внутренняя ошибка сервера» без логов.Когда вы используете mod_wsgi, вы должны удалить «app.run()», потому что это всегда будет запускать локальный WSGI-сервер, который нам не нужен, если мы развернем это приложение в mod_wsgi.См. документы .Я не знаю, если это ваш случай, но я надеюсь, что это может помочь.

0 голосов
/ 08 апреля 2014

Если вы поместите это в ваш config.py, это значительно поможет в распространении ошибок до журнала ошибок apache:

PROPAGATE_EXCEPTIONS = True
...