Отладка кода Django на mod_wsgi (как получить доступ к ['wsgi.errors'])

Я начинаю разработку кода Django на сервере, работающем поверх Apache/mod_wsgi.

Я пытаюсь понять несколько вещей:

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

  2. В частности, сейчас я пытаюсь просто использовать отладку печати. Но я не могу заставить операторы печати работать. Я печатаю в stderr, но не уверен, какой файл журнала мне следует смотреть. Согласно этому, я должен использовать environ['wsgi.errors'], но как мне получить к нему доступ из мой код Джанго?

Спасибо!

РЕДАКТИРОВАТЬ: Кстати, добавление строки print >> sys.stderr, 'message ...' не только не печатает ни в один файл журнала, но и приводит к тому, что части моего приложения просто не загружаются.


person Edan Maor    schedule 27.01.2011    source источник
comment
Я понял, как получить доступ к среде. Просто сделайте это: request.META['wsgi.errors'].write("ello world").   -  person Edan Maor    schedule 27.01.2011
comment
Используя «print», как вы его показываете, перенаправление на stderr должно работать нормально. К какому файлу журнала ошибок Apache он переходит, зависит от того, используете ли вы встроенный режим или режим демона и используете ли вы директиву ErrorLog внутри VirtualHost. Если это не выходит в журнале, то какие скрипки вы делаете с sys.stdout/sys.stderr в вашем файле сценария WSGI, если таковые имеются.   -  person Graham Dumpleton    schedule 27.01.2011
comment
Также можно использовать print ›› request.META['wsgi.errors'], 'hello world'.   -  person Graham Dumpleton    schedule 27.01.2011
comment
@Graham Dumpleton: я настроил собственный каталог журнала внутри своего VirtualHost, но ошибки не выводятся ни в каталог журнала, ни в каталог /var/log/apache, который, насколько мне известно, является основным каталогом журнала. Но самое странное не это, а то, что мое приложение не работает, когда я использую print ›› sys.stderr. Я бы предположил, что даже если мой файл журнала не работает должным образом, остальная часть приложения должна работать нормально.   -  person Edan Maor    schedule 27.01.2011
comment
Определите, что это не работает, но не делайте этого здесь. Предлагаем вам обратиться в список рассылки mod_wsgi, так как это не место для отладки проблем.   -  person Graham Dumpleton    schedule 27.01.2011


Ответы (1)


  1. Попробуйте использовать панель инструментов отладки django. Это может очень помочь при отладке, когда вы не можете использовать отладчик.

    На самом деле отладка должна выполняться на вашей машине разработки. Мне еще предстоит увидеть проблему с кодом в производстве с django, которая также не возникала в моем ящике разработчика.

  2. Обычно вы не можете печатать в mod_wsgi. Вместо этого используйте модуль logging. Это действительно то, что вам нужно, и панель инструментов отладки покажет вам операторы журнала на странице, поэтому вам даже не нужно смотреть на файл.

person Seth    schedule 27.01.2011
comment
Я пытаюсь использовать модуль ведения журнала. Я добавил в верхней части моего views.py первые строки из простых примеров, но я получаю отказ в разрешении IOError (я пытаюсь войти в свой домашний каталог). Есть ли что-то, что мне нужно сделать, чтобы дать разрешения? - person Edan Maor; 27.01.2011
comment
Я обнаружил проблему: пользователь, под которым работает Apache, не является пользователем, под которым я вхожу в систему, поэтому домашний каталог закрыт. Я дал всем разрешения на каталог журналов, используя chmod a+w logs. Есть ли у вас какие-либо рекомендации по чтению того, как настроить проблему ведения журнала с Django? У меня такое чувство, что просто добавить код в начало моего view.py не такая уж и хорошая идея. - person Edan Maor; 27.01.2011
comment
В любой версии mod_wsgi вы можете использовать print ›› sys.stderr, 'message...'. Используйте последнюю версию mod_wsgi, и вы вполне можете использовать «print», не направляя его в stderr. Он был заблокирован для mod_wsgi ‹3.0, чтобы поощрить вас к написанию переносимых WSGI-приложений, но, похоже, это никого не волнует. Прочтите 'blog.dscpl.com. au/2009/04/' для истории и причин. - person Graham Dumpleton; 27.01.2011
comment
Да, я уже видел этот пост, но, как я объяснил выше, ни обычная печать, ни печать ›› sys.stderr не работали. Использование request.META работает, как и ведение журнала, так что, думаю, я придерживаюсь этого. Спасибо за помощь в любом случае! - person Edan Maor; 27.01.2011
comment
Тогда ваша среда / конфигурация нарушена у кого-то, поскольку они должны работать. Предложите вам использовать сценарий WSGI hello world, чтобы протестировать его, и оставить в стороне любой фреймворк или собственный код приложения, чтобы убедиться, что они не являются причиной проблем. - person Graham Dumpleton; 27.01.2011