Подтвердить что ты не робот

Приложение Flask вызывает ошибку 500 без исключения

Я какое-то время ударяю головой об этом методе в Flask, и, хотя кажется, что я продвигаюсь вперед, я только что столкнулся с чем-то, что меня не сбивает с толку. Вот метод, который я вызываю:

@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)

В течение долгого времени у меня возникали ошибки, которые затем попадали бы в журналы heroku. В настоящее время ошибок нет, подразумевая, что он не достигает цикла except, но еще хуже, все еще есть 500 ошибок. В частности, 500 ошибок, которые я получаю:

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

Я посылаю эти POST запросы через AJAX в этом методе:

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!");
    }
});

Честно говоря, я просто не знаю, как продолжить отладку этой проблемы. Для меня не имеет большого смысла получать трассировку без исключения, но, возможно, я просто наивна.

Я использую mongoengine поверх MongoHQ на Heroku, если это релевантно.

4b9b3361

Ответ 1

После того, как я ударил головой об этом, я, наконец, понял это благодаря удивительным людям из группы google google (с тех пор я узнал, что есть отдельный список для фляжки). Во-первых, мне нужно включить параметр PROPAGATE_EXCEPTIONS в моей конфигурации приложения (http://flask.pocoo.org/docs/config/#builtin-configuration-values).

После этого я понял, что возникла проблема с возвратом ответа от функции просмотра, которую Flask интерпретировал этим методом как. Так как это было так, эта проблема была решена путем добавления:

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

В конец блока try. Надеюсь, это поможет кому-то в подобной ситуации в будущем.

Ответ 2

У меня была та же проблема, но основная причина отличалась от той, что была в ответе Слейтера:

Я отключил регистратор, к которому идет трассировка стека. Убедитесь, что вы не отфильтровываете регистратор flask.app, к которому flask.app трассировки стека исключений (обратите внимание, что это отличается от информационных журналов сервера app.api именем app.api).