2011-01-27 13 views
6

Zaczynam od tworzenia kodu Django na serwerze, działającego na Apache/mod_wsgi.Debugowanie kodu Django na mod_wsgi (jak uzyskać dostęp ['wsgi.errors'])

szukam zrozumieć kilka rzeczy:

  1. Jakie techniki są zwykle używane do debugowania aplikacji działających na serwerze ?

  2. W szczególności próbuję po prostu użyć debugowania "print" na . Ale I nie może uzyskać instrukcji drukowania do pracy. Drukuję na stderr, ale Nie jestem pewien, który plik logu powinienem obejrzeć na . Według this, powinienem używać environ['wsgi.errors'], ale jak mogę uzyskać dostęp do tego z mojego kodu Django pod numerem ?

Dzięki!

EDIT: Przy okazji, dodając linię print >> sys.stderr, 'message ...' nie tylko nie wydaje się, aby wydrukować dowolny plik dziennika, powoduje części mojej aplikacji po prostu nie załadować.

+2

Wymyśliłem, jak uzyskać dostęp do środowiska. Po prostu wykonaj to: 'request.META ['wsgi.errors']. Write (" ello world ")'. –

+1

Używanie "print" w trakcie pokazywania, skierowanie do stderr powinno działać dobrze. Który z plików rejestru błędów Apache, do którego się prowadzi, zależy od tego, czy korzystasz z trybu embedded lub demona i czy używasz dyrektywy ErrorLog w VirtualHost. Jeśli nie wychodzi z dziennika, to jakie skrzypce robisz do sys.stdout/sys.stderr w pliku skryptu WSGI, jeśli w ogóle. –

+2

Użycie może również użyć "print >> request.META ['wsgi.errors'], 'hello world'". –

Odpowiedz

5
  1. Spróbuj użyć django debug toolbar. Może pomóc w debugowaniu, gdy nie można używać debuggera.

    W rzeczywistości debugowanie powinno być wykonywane na komputerze programisty. Jeszcze nie widziałem problemu z kodem w produkcji z django, który nie występował również w moim dev boxie.

  2. Zwykle nie można drukować w mod_wsgi. Zamiast tego należy użyć modułu logging. To jest naprawdę to, czego chcesz, a pasek narzędzi do debugowania pokaże ci wyciągi z dziennika na stronie, więc nie musisz nawet patrzeć na plik.

+1

Próbuję użyć modułu rejestrowania. Dodałem na górze moich views.py pierwsze wiersze z "prostych przykładów", ale otrzymuję "IOError" odmowy zgody (próbuję zalogować się do mojego katalogu domowego). Czy jest coś, co muszę zrobić, aby dać uprawnienia? –

+0

Znalazłem problem - użytkownik, na którym działa Apache, nie jest użytkownikiem, do którego loguję się, więc katalog domowy jest niedostępny. Dałem wszystkim uprawnienia do katalogu log przy użyciu "chmod a + w logs". Czy masz jakieś zalecenia dotyczące czytania, jak skonfigurować problem z logowaniem w Django?Mam wrażenie, że samo dodanie kodu na górze mojego 'view.py' nie jest świetnym pomysłem. –

+1

W dowolnej wersji mod_wsgi możesz użyć "print >> sys.stderr," message ... '". Użyj najnowszego mod_wsgi i możesz całkiem szczęśliwie użyć "print" bez kierowania go na stderr. Zostało zablokowane dla mod_wsgi <3.0, aby zachęcić cię do napisania przenośnych aplikacji WSGI, ale wtedy nikt się tym nie przejmuje. Przeczytaj "http://blog.dscpl.com.au/2009/04/wsgi-and-printing-to-standard-output.html" z historii i powodów. –

Powiązane problemy