2013-08-05 13 views
27

Przez pewien czas waliłem głową w tą metodę w Flasku, i chociaż wydaje mi się, że robię postępy teraz, właśnie wydarzyło mi się coś, co zbija mnie z tropu. bez końca. Oto metoda, którą nazywam:Aplikacja kolby podnosi błąd 500 bez żadnego wyjątku

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

Przez długi czas dostałem tu błędy, które następnie zostałyby przechwycone w dziennikach Heroku. Obecnie nie ma błędów, co sugeruje, że nie dochodzi do pętli wyjątkowej, ale co gorsza, wciąż jest 500 błędów. Konkretnie 500 Błędy dostaję to:

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 

wyślę te POST żądań za pośrednictwem AJAX w tej metodzie:

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

Szczerze mówiąc ja po prostu nie wiem jak kontynuować debugowania tego problemu. To nie ma większego sensu, bym otrzymywał traceback bez wyjątku, ale może po prostu jestem naiwny.

Używam mongoengine na MongoHQ na Heroku, jeśli to jest istotne.

+0

Spróbuj dodać "GET" do metod. – solusipse

+1

Dodałem go, nie było żadnej zmiany. Nie wiem, dlaczego ... –

+0

Może zmiana '@ app.route ('/ facedata/'' na '@ app.route ('/ facedata/ /' lub 'url: document.location.origin +"/facedata/"+ slug" do 'url: document.location.origin +"/facedata/"+ slug +"/",' pomogłoby – solusipse

Odpowiedz

42

Po tym, jak pokonałem moją głowę w tym kierunku, w końcu zrozumiałem to dzięki niesamowitym ludziom z grupy google google pocoo (odkąd dowiedziałem się, że istnieje osobna lista dla kolb). Najpierw musiałem włączyć opcję PROPAGATE_EXCEPTIONS w konfiguracji mojej aplikacji (http://flask.pocoo.org/docs/config/#builtin-configuration-values).

Po wykonaniu tej czynności zdałem sobie sprawę, że wystąpił problem z brakiem odpowiedzi z funkcji widoku, którą Flask zinterpretował tę metodę jako. Ponieważ był to przypadek, ten problem został rozwiązany po prostu dodając:

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

Do końca bloku try. Mam nadzieję, że pomoże to komuś w podobnej sytuacji w przyszłości.

+12

Dzięki, to było trudne do znalezienia Ustawienie 'app.debug = True' zajmuje się' PROPAGATE_EXCEPTIONS' i mnóstwem innych nicetek, które pomagają w debugowaniu aplikacji z kolbami – Aphex

+1

Czy to nie to samo, co "powrót" "? – JeromeJ

+0

@JeromeJ Nie jestem pewien co do domyślnych metadanych, których 'flask' ​​zawija się w odpowiedziach, ale myślę, że lepiej tu być jawnym. –