web-dev-qa-db-ja.com

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

正直なところ、この問題のデバッグを継続する方法がわかりません。例外なくトレースバックを取得することはあまり意味がありませんが、たぶん私は単純です。

必要に応じて、HerokuのMongoHQの上でmongoengineを使用しています。

29

これにもう少し頭を痛めた後、pocoo googleグループの素晴らしい人たちのおかげでようやく理解できました(フラスコには別のリストがあることを知りました)。まず、アプリの構成でPROPAGATE_EXCEPTIONSオプションをオンにする必要がありました( http://flask.pocoo.org/docs/config/#builtin-configuration-values )。

それが終わった後、ビュー関数から応答を返さないという問題があることに気付きました。Flaskはこのメソッドを解釈しました。

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

tryブロックの終わりまで。これが将来同様の状況にある人を助けることを願っています。

47

私は同じ問題を抱えていましたが、根本的な原因はスレーターの応答のものとは異なっていました:

スタックトレースのロガーをミュートしていました。 flask.appロガーを除外していないことを確認してください。これは、例外スタックトレースが移動する場所です(これは、app.apiという名前のflaskサーバーの情報ログとは異なることに注意してください)。

0
Vito