Flask应用程序引发500错误,没有异常

时间:2013-08-05 13:53:39

标签: python exception heroku flask

我已经在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

我通过此方法通过AJAX发送这些POST个请求:

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

老实说,我只是不知道如何继续调试这个问题。在没有例外的情况下获得追溯对我来说并没有多大意义,但也许我只是天真。

我在Heroku上的MongoHQ上使用mongoengine,如果相关的话。

2 个答案:

答案 0 :(得分:46)

在打了我的脑袋之后,我终于弄明白了,感谢pocoo google小组中的人们(我已经知道烧瓶有一个单独的列表)。首先,我需要在我的应用配置中启用PROPAGATE_EXCEPTIONS选项(http://flask.pocoo.org/docs/config/#builtin-configuration-values)。

在完成之后,我意识到没有从视图函数返回响应的问题,Flask将此方法解释为。既然如此,只需添加以下内容即可解决此问题:

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

try块的末尾。我希望这可以帮助将来处于类似情况的人。

答案 1 :(得分:0)

我遇到了同样的问题,但是根本原因与Slater的回应中的原因不同:

我正在静音堆栈跟踪所进入的记录器。请确保您没有过滤掉flask.app记录器,该记录器是异常堆栈跟踪所去的地方(请注意,这与烧瓶服务器的信息日志(名为app.api不同)。