2013-08-05 21 views
27

Bir süredir Flask'ta kafamı bu yönteme karşı vuruyorum ve şu anda ilerleme kaydediyorum gibi görünüyordum, sadece beni şaşırtan bir şey üzerinde oldum sonsuz.Flask uygulaması istisna olmaksızın 500 hatayı gündeme getiriyor

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

sonra Heroku günlüklerinde yakalanmış olacağını Buraya hataları başlamıştı Uzun bir süredir: İşte diyorum yöntemdir. Şu anda hiçbir hata yoktur, bunun istisna döngüsüne ulaşmadığını ima eder, ama daha da kötüsü, hala 500 hata vardır. Özellikle alıyorum 500 hataları şunlardır: Bu yöntemde AJAX yoluyla bu POST istekleri yolluyorum

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 

:

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

Oldukça dürüst sadece bu sorunu ayıklama devam etmek nasıl bilmiyorum. Bir istisna olmaksızın bir iz bırakma elde etmek benim için pek bir şey ifade etmiyor, ama belki sadece saf olduğumu düşünüyorum.

Eğer ilgili ise MongoHQ üstünde Herooengine mongoengine kullanıyorum.

+0

Yöntemlere "GET" eklemeyi deneyin. – solusipse

+1

Ekledim, değişiklik olmadı. Neden olmasın ... –

+0

Belki de @ @ app.route ('/ facedata/' '' 'app.route ('/ facedata/ /' veya 'url: document.location.origin +'/facedata/"+ slug," url: document.location.origin + "/ facedata /" + slug + "/", 'yardımcı olur. – solusipse

cevap

42

Başım ağrımdan sonra biraz daha pocoo google grubundaki harika insanlar sayesinde bunu anladım (o zamandan beri balon için ayrı bir liste olduğunu öğrendim). Öncelikle, uygulama yapılandırmamda PROPAGATE_EXCEPTIONS seçeneğini açmam gerekiyordu (http://flask.pocoo.org/docs/config/#builtin-configuration-values).

Bu yapıldıktan sonra, Flask'ın bu yöntemi yorumladığı bir görünüm işlevinden yanıt döndürmeyen bir sorun olduğunu farkettim. Eğer durum olduğu için, bu konunun sadece ekleyerek çözüldü: try bloğunun amaçla

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

. Umarım bu, gelecekte benzer bir durumda olan birine yardımcı olur.

+12

Teşekkürler, bu bulmak zordu. 'app.debug = True' ayarı 'PROPAGATE_EXCEPTIONS' ve flask uygulamalarının hatalarını ayıklamaya yardımcı olan diğer nicelikler ile ilgilenir. – Aphex

+1

'Return' ile aynı şey olmaz mıydı? "' – JeromeJ

+0

@JeromeJ 'Şişenin' yanıtları etrafında sarardığı varsayılan meta verilerden emin değilim, ama bence burada açık olmak daha iyidir. –