web-dev-qa-db-ja.com

Flask debug = uWSGIを実行するときにtrueが機能しません

flaskファイルで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ログにはデバッグ情報がありません。

何か案は?

フラスコファイル名.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()
38
Flaviu

the Flaskメーリングリスト によると、uWSGIでFlaskのデバッグオプションを使用することはできません。フォーク環境では使用されないためです。

Flask/werkzeugはWebサーバーにデータを送信しないため、502が表示されます。nginxは502を返します。

UWSGIで--catch-exceptionsオプションを使用してデバッガをエミュレートできます(ただし、本番環境では行わないでください)

したがって、502が表示されるのはそのためです。修正は、実行時に--catch-exceptionsuWSGIに追加することです。

25
Edwardr

この質問は古いですが、今後の参考のためにこれを投稿します...

Werkzeugエラーページをuwsgiで動作させるには、werkzeugのDebuggedApplicationミドルウェアを使用してみてください。

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

これでうまくいくはずですが、開発環境でのみこれを行うことを忘れないでください。

31
gonz

問題はuwsgiapp.run()を呼び出さないことです。 app()を呼び出します。したがって、代わりにこれを行うことができます:

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

私にとっては、このように上記の2つの答えを組み合わせた後にのみ機能しました。

from flask import Flask
app = Flask(__name__)

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

app.debug = True
1
baermathias