2016-03-24 13 views
2

Hier ist eine einfache Flasche App mit einem Syntaxfehler (es sollte sys.version, nicht sys.version()Warum gibt mir Flask keinen interaktiven Debugger?

from flask import Flask, url_for, request, render_template 
import sys 

app = Flask(__name__) 
app.config.from_object(__name__) 

@app.route('/') 
def index(): 
    version = sys.version() 
    return "This is the index page. Python version info: {}".format(version) 

if __name__ == '__main__': 
    app.run(debug=True) 

Als ich es Zugang http://localhost:5000 vor Ort und versuchen, laufen, ich das schöne Werkzeug Debugger erhalten:

enter image description here

aber wenn ich es auf einem Remote-Server ausgeführt werden (Apache 2.4.17, mod_wsgi 4.4.21), erhalte ich nur eine generische 500-Fehlerseite:

enter image description here

ich verschiedene Dinge versucht haben, diese Arbeit zu machen:

  • gesetzt app.debug = True direkt nach app = Flask(__name__)
  • basierend auf this link, ich versucht, indem diesen Code auch:

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

aber nichts scheint zu helfen.

Ich weiß, dass der Debugger nicht in gegabelten Umgebungen funktioniert, aber nach this link, der Standardmodus für mod_wsgi ist nicht gegabelt werden. Meine Apache-Konfiguration lautet:

WSGIDaemonProcess flasktest user=david group=devgrp threads=1 python-path=/apps/www/80/wsgi-scripts/FlaskTest:/apps/.virtualenvs/flasktest/lib/python3.4/site-packages 

Warum kann ich nicht den hübschen Debugger bekommen?

EDIT: Hier ist die geänderte Datei mit meinen Ergänzungen (die nicht berufstätig sind)

from flask import Flask 
import sys 

app = Flask(__name__) 
app.config.from_object(__name__) 
app.debug = True 

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

@app.route('/') 
def index(): 
    version = sys.version() 
    return "This is the index page. Python version info: {}".format(version) 

if __name__ == '__main__': 
    app.run(debug=True) 

Antwort

2

Um WSGI Middleware in einen Kolben App hinzufügen, wickeln und die wsgi_app Attribut App ersetzen. Stellen Sie im Fall der Debug-Middleware auch app.debug = True ein, so dass Flask keine Ausnahmen in 500 Antworten konvertiert.

app.debug = True 
app.wsgi_app = DebuggedApplication(app.wsgi_app, evalex=True) 

Es ist ein Sicherheitsrisiko, das Debugger auf einem öffentlichen Server laufen zu lassen. Trotz der letzten Änderung, die eine PIN erfordert, bevor Code ausgeführt wird, kann der Debugger in unsicheren Weisen immer noch unsicher sein. In der Regel erhalten Sie Informationen über Fehler in der Produktion mithilfe der Protokollierung. This answer ist eine gute grundlegende Zusammenfassung, wie Sie das einrichten.


Ihre Methode würde wahrscheinlich funktionieren, wenn Sie ersetzt hatte app anstatt application es nennen. mod_wsgi hat wahrscheinlich app vor application übernommen, also lief noch immer die ursprüngliche App. Es wird jedoch immer noch empfohlen, app.wsgi_app zu wickeln.

Verwandte Themen