Журналы Heroku для проектов Django пропускают ошибки

Я запускаю простой проект Django на Heroku. Он работает, но если я получаю ошибку сервера, это не дает мне никаких подробностей в журналах. Это затрудняет работу с ошибками.

Теперь я настроил промежуточный сервер, и у него такая же проблема - страницы терпят неудачу, и я не получаю отзывов о том, почему.

$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

Как вы можете видеть, страницы возвращаются как 500, но я не получаю никакой информации трассировки стека или подобного.

Возможные проблемы могут быть отмечены: "Сервер разработки работает на..." - что это значит и влияет ли на регистрацию ошибок?

Кроме того, я использую файл шаблона '500.html', чтобы определить пользовательскую страницу ошибок 500. Может ли это как-то скрывать ошибки? Это действительно не должно.

Или мне нужно искать в другом месте для журналов с Django на Heroku?

Спасибо!

Ответ 1

Похоже, это была просто проблема, вызванная ожиданием того, что Django под Heroku будет работать как Rails. Глупый я.

Для всех, кто страдает этой проблемой при переходе с одного фреймворка/языка на другой:

  • Когда отладка отключена, Django использует стандартный регистратор Python для обработки ошибок в коде.
  • В нижней части settings.py есть настройка по умолчанию, которая отправляет письма администратору сайта, когда есть ошибки. Ницца. Он нуждается в массиве адресов электронной почты в переменной ADMINS в settings.py для работы.
  • Ошибки отправляются по умолчанию в STDERR вместо STDOUT, поэтому они не отображаются в журналах. По-видимому, это можно изменить. Попробуйте здесь, если вы хотите этого поведения:

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

Ответ 2

Это поведение задается сервером (например, gunicorn), а не Django или Heroku.

Обычно в командной строке или конфигурации изменяется уровень журнала по умолчанию.

Ответ 3

Это можно решить, просто изменив DEBUG в файле settings.py. DEBUG = True