2015-06-27 2 views
0

Я поддерживаю веб-приложение с API-интерфейсом Flask, который возвращает специальные коды ошибок. API работает через Apache и модуль WSGI в режиме демона.Невозможно отключить WSGIErrorOverride

Я включил инструкцию для Apache conf в API (который должен быть по умолчанию, но я все равно включил его).

Однако в любое время приложение Flask возвращает код пользовательской ошибки (они работают при запуске приложения с использованием встроенного сервера), Apache отправляет ошибку 500. Как я могу это предотвратить?

+1

Вы уверены, что ваше приложение не врезаться при попытке вернуть пользовательский код ошибки? Проверьте журнал ошибок вашего сервера. – duskwuff

+0

@duskwuff Вы правы, на самом деле все нормально работает, когда я сам установил код состояния (_e.g._ 'return Hello World", 401' в представлении Flask). Что происходит здесь, так это то, что мой пакет безопасности (Flask-JWT) генерирует исключение, которое каким-то образом захватывается Flask при запуске встроенного сервера, но не при работе в Apache + WSGI. Из того, что я вижу в трассировке стека, возможно, что виноват другой пакет Flasf-RESTful. Сегодня я попробую обходить его позже. – arnaudrg

+1

Вы можете проверить, что действительно выходит из вашего приложения WSGI, используя https://code.google.com/p/modwsgi/wiki/DebuggingTechniques#Tracking_Request_and_Response. Это точно сообщит вам, будет ли страница с ошибкой 500 поступать из вашего приложения. Как вы сказали, Apache/mod_wsgi не должен касаться вашего ответа. Apache/mod_wsgi должен генерировать только 500 страниц ошибок, если что-то пошло не так в Apache или mod_wsgi, или ваш ответ сам по себе был как-то сломан, хотя я даже не могу вспомнить, где mod_wsgi может сделать последнее. –

ответ

0

Благодаря комментариям от duskwuff и Graham Dumpleton, я обнаружил, что проблема связана не с Apache WSGI, а с моим флеш-приложением. Точнее, я использовал пакет Flask-RESTful, который, помимо прочего, отвечает за преобразование возвращаемых значений моих представлений в фактические ответы.

Когда эти виды украшены (здесь с эквивалентом @login_required), эти декораторы вызывают сам пакет Flask-RESTful, и когда возникает исключение, что-то не так.

По какой-то причине мое приложение возвращает пользовательскую ошибку при запуске встроенного сервера и ошибке 500, когда я запускаю ее поверх Apache. Не совсем уверен, почему пока, я предполагаю, что Flask-RESTful делает то, что не соответствует WSGI. Я был на пороге отказа от него в любом случае по другим причинам, поэтому я в порядке с этим решением.

Update: это выглядит как проблема действительно приходят из Колба-RESTful: https://github.com/flask-restful/flask-restful/issues/372