Журналы 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