Подтвердить что ты не робот

Flask debug = True не работает при прохождении через uWSGI

Я вызываю app.run(debug=True) в моем файле фляжки.

и я развернул его с помощью uWSGI и nginx (я следил за этими инструкциями)

uwsgi -s /tmp/uwsgi.sock -w flask_file_name:app -H /path/to/virtual/env --chmod-socket 666

Но когда я получаю сообщение об ошибке, я не получаю отладочную информацию в браузере или в журнале uWSGI.

Любые идеи?

flask_file_name.py:

from flask import Flask, make_response, Response, jsonify
import json

app = Flask(__name__)
app.debug = True

@app.route("/")
def hello():
    return "Hello World!"

if __name__ == '__main__':
    app.run()
4b9b3361

Ответ 1

В соответствии с списком рассылки Flask вы не можете использовать опцию Flask debug с uWSGI, потому что она не должна использоваться в среде forking.

Вы видите 502, потому что флак /werkzeug не отправляет какие-либо данные на веб-сервер, поэтому nginx вернет 502.

Вы можете эмулировать отладчик, используя опцию -catch-exceptions в uWSGI (но, пожалуйста, не делайте этого в производстве)

Итак, причина, по которой вы видите 502s, будет из-за этого. Исправить было бы добавить --catch-exceptions в uWSGI при выполнении.

Ответ 2

Этот вопрос старый, но я отправлю его для справки в будущем...

Если вы хотите, чтобы страница ошибок werkzeug работала с uwsgi, попробуйте использовать werkzeug DebuggedApplication middleware:

from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)

Это должно сделать трюк, но НЕ ЗАБУДЬТЕ делать это ТОЛЬКО в средах разработки.

Ответ 3

Проблема uwsgi не вызывает app.run(). Он вызывает app(). Поэтому вы можете это сделать:

from flask import Flask
app = Flask(__name__)
app.debug = True

Ответ 4

Для меня это сработало только после того, как я объединил два ответа выше, как это:

from flask import Flask
app = Flask(__name__)

from werkzeug.debug import DebuggedApplication
app.wsgi_app = DebuggedApplication(app.wsgi_app, True)

app.debug = True

Ответ 5

Вы решили эту проблему, я столкнулся с точно такой же проблемой. Если вы решите это, скажите, пожалуйста, спасибо :)