2013-08-05 26 views
27

Tôi đã đập đầu vào phương pháp này trong Flask một thời gian, và trong khi có vẻ như tôi đang tiến bộ, tôi vừa mới xảy ra thứ gì đó khiến tôi không có kết thúc. Đây là phương pháp tôi đang gọi:Ứng dụng Flask tăng 500 lỗi mà không có ngoại lệ

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

Trong một thời gian dài, tôi đã nhận được lỗi ở đây, sau đó sẽ được ghi lại trong nhật ký heroku. Hiện tại không có lỗi, ngụ ý rằng nó không đạt đến vòng lặp ngoại trừ, nhưng thậm chí tệ hơn, vẫn còn 500 lỗi. Cụ thể, 500 lỗi tôi nhận được là:

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 

tôi gửi những POST yêu cầu qua AJAX trong phương pháp này:

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

Khá thật tôi chỉ không biết làm thế nào để tiếp tục gỡ rối vấn đề này. Nó không có nhiều ý nghĩa với tôi để có được một traceback mà không có một ngoại lệ, nhưng có lẽ tôi chỉ là ngây thơ.

Tôi đang sử dụng mongoengine trên đầu trang của MongoHQ trên Heroku nếu điều đó có liên quan.

+0

Thử thêm "GET" vào phương thức. – solusipse

+1

Tôi đã thêm nó, không có thay đổi. Không chắc chắn tại sao sẽ có ... –

+0

Có thể thay đổi '@ app.route ('/ facesata/'' thành '@ app.route ('/ facesata/ /' hoặc 'url: document.location.origin +"/facesata/"+ slug,' to 'url: document.location.origin +"/facesata/"+ slug +"/",' sẽ trợ giúp. – solusipse

Trả lời

42

Sau khi đánh đầu chống lại điều này, tôi cuối cùng đã tìm ra được nhờ những người tuyệt vời trên nhóm google pocoo (tôi đã biết rằng có một danh sách riêng biệt cho bình). Thứ nhất, tôi cần bật tùy chọn PROPAGATE_EXCEPTIONS trong cấu hình ứng dụng của mình (http://flask.pocoo.org/docs/config/#builtin-configuration-values).

Sau khi thực hiện xong, tôi nhận thấy có sự cố không trả về phản hồi từ chức năng chế độ xem mà Flask đã giải thích phương thức này là. Do đó, vấn đề này đã được giải quyết bằng cách chỉ cần thêm:

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

Đến cuối khối try. Tôi hy vọng điều này sẽ giúp ai đó trong một tình huống tương tự trong tương lai.

+12

Cảm ơn, điều này rất khó tìm. Thiết lập 'app.debug = True' sẽ xử lý' PROPAGATE_EXCEPTIONS' và vô số các niceties khác giúp gỡ lỗi ứng dụng bình. – Aphex

+1

Nó sẽ không giống với 'return ' "'? – JeromeJ

+0

@JeromeJ Tôi không chắc chắn về siêu dữ liệu mặc định mà 'flask' ​​kết thúc tốt đẹp xung quanh phản hồi của nó, nhưng tôi nghĩ tốt hơn là nên rõ ràng ở đây. –