2012-08-08 10 views
11

Ich führe ein einfaches Django-Projekt auf Heroku. Es funktioniert, aber wenn ich einen Serverfehler erhalte, gibt es mir keine Details in den Protokollen. Dies macht es unglaublich schwer mit Fehlern umzugehen.Heroku-Logs für Django-Projekte fehlende Fehler

Jetzt habe ich einen Staging-Server eingerichtet und es hat das gleiche Problem - die Seiten sind fehlgeschlagen und ich bekomme kein Feedback, warum.

$ Heroku logs

...

2012-08-08T13:55:58+00:00 app[web.1]: Development server is running at http://0.0.0.0:59048/ 
2012-08-08T13:55:59+00:00 heroku[web.1]: State changed from starting to up 
2012-08-08T13:56:01+00:00 heroku[router]: GET [xxx].herokuapp.com/ dyno=web.1 queue=0 wait=0ms service=22ms status=500 bytes=27 
2012-08-08T13:56:01+00:00 app[web.1]: [08/Aug/2012 14:56:01] "GET/HTTP/1.1" 500 27 
2012-08-08T13:56:02+00:00 heroku[router]: GET [xxx].herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=6ms status=500 bytes=27 
2012-08-08T13:56:09+00:00 heroku[router]: GET[xxx].herokuapp.com/admin dyno=web.1 queue=0 wait=0ms service=2ms status=301 bytes=0 
2012-08-08T13:56:09+00:00 app[web.1]: [08/Aug/2012 14:56:09] "GET /admin HTTP/1.1" 301 0 
2012-08-08T13:56:10+00:00 heroku[router]: GET [xxx].herokuapp.com/admin/ dyno=web.1 queue=0 wait=0ms service=224ms status=500 bytes=27 
2012-08-08T13:56:10+00:00 app[web.1]: [08/Aug/2012 14:56:10] "GET /admin/ HTTP/1.1" 500 27 
2012-08-08T13:56:10+00:00 heroku[router]: GET [xxx].herokuapp.com/favicon.ico dyno=web.1 queue=0 wait=0ms service=6ms status=500 bytes=27 

Wie Sie sehen können, Seiten 500 zurückkehren, aber ich bin keine Stack-Trace Informationen oder ähnliches bekommen.

Mögliche Probleme können angezeigt werden durch: 'Entwicklungsserver läuft bei ...' - was bedeutet das und beeinflusst es die Fehlerprotokollierung?

Außerdem verwende ich eine Template-Datei '500.html', um eine benutzerdefinierte 500-Fehlerseite zu definieren. Könnte das irgendwie Fehler verstecken? Es sollte wirklich nicht.

Oder muss ich an einem anderen Ort für Protokolle mit Django auf Heroku suchen?

Danke!

Antwort

9

Sieht aus wie es einfach ein Problem war, das durch die Erwartung verursacht wurde, dass Django unter Heroku wie Rails funktionieren würde. Wie dumm von mir.

Für jemanden dieses Problem leiden, wenn man von einem Rahmen/Sprache in einer anderen: off

  • Wenn Debug ist, verwendet Django den Standard-Python-Logger Fehler im Code zu behandeln.
  • Am unteren Rand von settings.py gibt es eine Standardkonfiguration, die die Site bei Fehlern per E-Mail benachrichtigt. Nett. Es benötigt ein Array von E-Mail-Adressen in der ADMINS-Variablen in settings.py, um zu funktionieren.
  • Fehler werden standardmäßig an STDERR anstelle von STDOUT gesendet, sodass sie nicht in den Protokollen angezeigt werden. Dies kann scheinbar geändert werden. Versuchen Sie hier, wenn Sie dieses Verhalten wollen:

    http://codeinthehole.com/writing/console-logging-to-stdout-in-django/

+1

Herokus Dokumente zeigen an, dass sie sowohl stderr als auch stdout protokollieren werden ... Ich frage mich, ob das früher anders war, als du das beantwortet hast und jetzt geändert hast? https: //devcenter.heroku.com/articles/logging # write-to-your-log Ich schätze, ich kann es ausprobieren. –

+0

Das Problem, das ich hatte, war nicht mit Heroku, das funktionierte wie erwartet. Es war mit Django, die nicht wie Rails funktioniert. Vielleicht offensichtlich. –

0

Dieses Verhalten wird vom Server festgelegt (z. B. Gunicorn), nicht von Django oder Heroku.

Es gibt normalerweise eine Befehlszeile oder Konfiguration, die die Standardprotokollstufe ändert.

+1

Ah, dann zeigen die Heroku-Standardeinstellungen keine Stack-Traces? Danke, das gibt mir eine Richtung zu versuchen. Wenn ich fruchtbar bin, erkläre ich meine Lösung und akzeptiere sie. –

+1

OK, ich habe versucht, Gunicorn zu verwenden und den Logging-Level auf Debug zu setzen. Kein Würfel. Hauptfrage wird aktualisiert. –

+0

Wie ich herausgefunden habe, wird das Verhalten von Django mit den Logging-Einstellungen am unteren Rand von settings.py eingestellt. Dies ist zunächst etwas undurchsichtig, aber ich verstehe, dass es sich um eine Standard-Python-Logger-Konfiguration handelt, so dass es im Internet jede Menge Hilfe geben wird. –

-3

Dies ist nur gelöst werden können, Ihre DEBUG in Ihrer settings.py Datei zu ändern. DEBUG = True

Verwandte Themen