2012-04-28 15 views
29

Io chiamo app.run(debug=True) nel file del mio pallone.Flask debug = True non funziona quando passa attraverso uWSGI

e ce l'ho schierato con uWSGI e nginx (ho seguito these instructions)

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

Ma quando ottengo un errore, non ottengo alcuna informazione di debug nel browser o nel registro uWSGI.

Qualche idea?

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() 
+0

Puoi postare 'flask_file_name.py'? –

risposta

23

Secondo the Flask mailing list non è possibile utilizzare l'opzione di debug di Flask con uWSGI, perché non è da utilizzare in un ambiente forking.

Vedete 502 perché pallone/werkzeug non inviare tutti i dati al server web, in modo da nginx volontà restituisce un 502.

È possibile emulare il debugger utilizzando --catch-eccezioni opzione uWSGI (ma per favore non farlo in produzione)

Quindi, la ragione per cui stai vedendo 502 sarà per questo. La correzione sarebbe quella di aggiungere --catch-exceptions a uWSGI all'esecuzione.

+0

Tu sei l'uomo! Non è ancora formattato come se fosse senza uWSGI, ma ora ottengo l'errore. Grazie mille! – Flaviu

+0

Sì, ma vedi anche il commento di gonz, sotto. :) –

19

Il problema è uwsgi non chiama app.run(). Chiama app(). Così, invece si può fare questo:

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

Grazie. Questo aiuta. Ora, se ho un errore di sintassi, reindirizza alla pagina di errore statico 50x.html di nginx. Come posso ottenere una boccetta per gestirlo? – Flaviu

25

Questa domanda è vecchio, ma io postare questo per riferimento futuro ...

Se si desidera ottenere la pagina di errore Werkzeug a lavorare con uwsgi, provare a utilizzare DebuggedApplication middleware di Werkzeug:

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

Questo dovrebbe fare il trucco ma NON DIMENTICARE di farlo SOLO negli ambienti di sviluppo.

+4

Questo ha funzionato per me, le altre risposte no. Grazie. –

+2

Per far funzionare il prompt del debugger, è necessario utilizzare un singolo worker in uwsgi (--workers 1, --threads 4) – GaretJax

Problemi correlati