it-swarm.com.de

Die Flaschen-App löst ohne Ausnahme einen Fehler 500 aus

Ich habe in Flask schon seit einiger Zeit mit dem Kopf gegen diese Methode gestoßen, und obwohl es so aussieht, als ob ich jetzt Fortschritte mache, bin ich gerade auf etwas gestoßen, das mich völlig verblüfft. Hier ist die Methode, die ich anrufe:

@app.route('/facedata/<slug>', methods=["POST"])
def facedata(slug):
    if request.method == "POST":
        try:
            post = Post.objects.get_or_404(slug=slug)
            data = [float(item) for item in request.form.getlist('emotions[]')]
            post.face_data.append(data)
            post.save()
        except:
            traceback.print_exc(file=sys.stdout)

Lange Zeit bekam ich hier Fehler, die dann in den Heroku-Protokollen hängen blieben. Derzeit gibt es keine Fehler, was bedeutet, dass die Ausnahme-Schleife nicht erreicht wird. Schlimmer noch: Es gibt immer noch 500 Fehler. Die 500 Fehler, die ich bekomme, sind:

heroku[router]: at=info method=POST path=/facedata/StripedVuitton Host=cryptic-mountain-6390.herokuapp.com fwd="18.111.90.180" dyno=web.2 connect=4ms service=39ms status=500 bytes=291

Ich sende diese POST-Anforderungen über AJAX in dieser Methode:

var slug = document.getElementById("hidden-slug").getAttribute("value");
data = {emotions: lRes};
$.ajax({
    type: "POST",
    data: data,
    url: document.location.Origin + "/facedata/" + slug,
    success: function(){
        console.log("Success!");
    }
});

Ehrlich gesagt weiß ich einfach nicht, wie ich dieses Problem weiter debuggen kann. Es macht für mich nicht viel Sinn, ausnahmslos einen Traceback zu bekommen, aber vielleicht bin ich einfach nur naiv.

Ich benutze Mongo-Engine auf MongoHQ auf Heroku, wenn das relevant ist.

29

Nachdem ich meinen Kopf noch ein bisschen dagegen geschlagen hatte, fand ich es schließlich dank der großartigen Leute in der Pocoo-Google-Gruppe heraus (seitdem habe ich erfahren, dass es eine eigene Liste für Flaschen gibt). Zuerst musste ich die PROPAGATE_EXCEPTIONS-Option in meiner App-Konfiguration aktivieren ( http://flask.pocoo.org/docs/config/#builtin-configuration-values ​​ ).

Nachdem dies erledigt war, wurde mir klar, dass es ein Problem gab, dass keine Antwort von einer View-Funktion zurückgegeben wurde, was Flask diese Methode als interpretierte. Da dies der Fall war, wurde dieses Problem gelöst, indem Folgendes hinzugefügt wurde:

return jsonify(result={"status": 200})

Bis zum Ende des try-Blocks. Ich hoffe, dass dies jemandem in einer ähnlichen Situation in der Zukunft hilft.

46

Ich hatte das gleiche Problem, aber die zugrunde liegende Ursache unterschied sich von der in Slaters Antwort: 

Ich habe den Logger stummgeschaltet, zu dem der Stack-Trace gehört. Stellen Sie sicher, dass Sie den flask.app-Logger nicht herausfiltern. Dies ist der Ort, an den die Ausnahmestapel-Ablaufverfolgungen gehen (beachten Sie, dass sich dies von den Informationsprotokollen des Flaskenservers app.api unterscheidet).

0
Vito