web-dev-qa-db-fra.com

Le débogage du flacon = True ne fonctionne pas lors du passage à uWSGI

J'appelle app.run(debug=True) dans mon fichier de flacon.

et je l’ai déployé avec uWSGI et nginx (j’ai suivi ces instructions )

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

Mais quand je reçois une erreur, je ne reçois aucune information de débogage dans le navigateur ou dans le journal uWSGI.

Des idées?

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 __== '__main__':
    app.run()
33
Flaviu

Selon la liste de diffusion Flask vous ne pouvez pas utiliser l'option de débogage de Flask avec uWSGI car elle ne doit pas être utilisée dans un environnement de forking.

Vous voyez 502 parce que flask/werkzeug n'envoie aucune donnée au serveur Web, alors nginx retournera un 502.

Vous pouvez émuler le débogueur en utilisant l'option --catch-exceptions dans uWSGI (mais s'il vous plaît ne le faites pas en production)

Donc, la raison pour laquelle vous voyez 502 sera à cause de cela. Le correctif consisterait à ajouter --catch-exceptions à uWSGI lors de l'exécution.

23
Edwardr

Cette question est ancienne, mais je la posterai pour référence future ...

Si vous voulez que la page d'erreur werkzeug fonctionne avec uwsgi, essayez d'utiliser le middleware DebuggedApplication de werkzeug:

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

Cela devrait faire l'affaire, mais N'OUBLIEZ PAS de le faire UNIQUEMENT dans les environnements de développement.

31
gonz

Le problème est uwsgi n'appelle pas app.run(). Il appelle app(). Donc, au lieu de cela, vous pouvez faire ceci:

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

Pour moi, cela n'a fonctionné qu'après avoir combiné les deux réponses ci-dessus comme ceci:

from flask import Flask
app = Flask(__name__)

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

app.debug = True
0
saitam