2012-11-03 18 views
7

Początkowo miałem aplikację Django z dołączonym serwerem testowym. Aby debugować tę konfigurację, mogę dodać tylko import pdb; pdb.set_trace() w dowolnym miejscu kodu i mieć punkt przerwania, który przenosi mnie do interaktywnego debuggera w Terminalu (w linii poleceń).Django Gunicorn Debugowanie

Niedawno przeniosłem się do gunicorn, aby uzyskać pewne korzyści. Jak mogę uzyskać podobne zachowanie podczas korzystania z tej konfiguracji Gunicorn. Próbowałem przez ustawienie ustawień Gunicorn z debug=True i daemon=False, ale to nie działa.

Ktoś ma rozwiązanie tego problemu?

+0

Czy dowiedzieć się, jak zrobić to działa? – duduklein

+0

tak, przeczytaj moją odpowiedź. to jest to, co teraz robię ... –

+0

Udało mi się połączyć gunicorn i ipdb. zobacz moją odpowiedź poniżej. Proponuję również ustawienie limitu czasu na większą wartość, abyś miał czas na debugowanie. – duduklein

Odpowiedz

4

Aby uruchomić zielony jednorożec w konfiguracji odwrotnej proxy (pod nginx) w trybie debugger/debugowania, wprowadź następujące ustawienia w Run/Django/Edycja konfiguracji PyCharm „s

oczywiście użyć niezależnie od portu (zamiast 7777) skonfigurowałeś swój nginx jako proxy.

Screenshot

+1

co przy użyciu GUI dla Pythona: D ? – holms

+0

To naprawdę nie pomaga. op chce użyć debugowania 'pdb', a nie GUI PyCharm. – WhyNotHugo

2

Jeśli jesteś w stanie uruchomić gunicorn wskazując na przykład application który jest instancją klasy DebuggedApplication z biblioteki werkzeug, będzie można ustawić punkty przerwy pomocą debuggera Werkzeug z import ipdb; ipdb.set_trace() bezpośrednio w przeglądarce.

import django.core.handlers.wsgi 
from werkzeug.debug import DebuggedApplication 

application = django.core.handlers.wsgi.WSGIHandler() 
application = DebuggedApplication(application, evalex=True) 

Upewnij się, że zainstalowałeś bibliotekę werkzeug i ipdb oczywiście. (pip install werkzeug i pip install ipdb)

+0

to nie zadziałało – duduklein

+0

@ calvin-cheng: Nie wiem, jak to ma działać. Najpierw powinienem otrzymać nieobsługiwany wyjątek, aby debuger śledzenia We Weug był widoczny w interfejsie użytkownika (tj. Przeglądarce internetowej). To działa. Z ich linii poleceń w interfejsie użytkownika wywołuję import ipdb; ipdb.set_trace(). To powoduje wyjątek, wygląda na to, że ipdb nie lubi swojej konsoli (wygląda na to, że jest to klasa HTML *, która nie brzmi zupełnie nie tak, kiedy powinna działać w przeglądarce). –

0

W końcu udało mi się uruchomić python manage.py runserver <your_external_IP>:8000, gdy chcę użyć pdb.

Więc trzeba mieć 2 różne repozytoria w tej samej maszynie, jeden jako żywe build produkcyjnej (ten działa gunicorn), a drugiej kompilacji testy, jeden ja potrzeba do debugowania, gdzie używam pdb. Gdy rzeczy wydają się stabilne podczas kompilacji TEST, scalam TEST branch z LIVE branch. Żadne zmiany ani rozwój nie nastąpią na LIVE branch w ten sposób unikam konfliktów scalania.

Mam nadzieję, że to pomaga inni, którzy są uzależnieni od pdb;)

+0

dziękuję za udostępnienie twojego rozwiązania. Doceniam to. Udało mi się sprawić, że to działa, a także udostępnione moje. – duduklein

+2

To faktycznie robi _NOT_ działa, jeśli masz odwrotny serwer proxy https (np. Nginx) – Kimvais

+0

@Kimvais tak, masz rację. jeśli wiesz jak to zrobić w obecności odwrotnego proxy HTTP, jestem zainteresowany poznaniem konfiguracji ... –

2

udało mi teraz używać gunicron z djnago i ipdb.

run python -m ipdb manage.py run_gunicorn --debug -t 3600

Używam Django 1.4 i gunicorn 0.16.1. wtedy zwykle można użyć kodu import ipdb; ipdb.set_trace(). Nie ma potrzeby biblioteki werkzeug.

Próbuję debugować aplikację na Facebooku, więc nie mogę skorzystać z wbudowanych w serwerze rozwoju, ponieważ facebook próbuje użyć SSL i serwer dev prostu nie może odpowiedzieć prawidłowo

Podczas gdy szukałem dla rozwiązania znalazłem post pdb: Using the Python debugger in Django, który sugeruje ciągłe uruchamianie python -m pdb manage.py runserver. Chociaż nie jest to konieczne z serwerem dev django, postanowiłem spróbować z gunicordn i ipdb i zadziałało.

3

Ok ja niedawno stumbed na podobnym problemem. Nie mogłem zastosować rozwiązania @dudklein (otrzymuję błędy wejścia/wyjścia, podczas gdy debugger próbował wprowadzić dane wejściowe - ipdb, pdb itp.)

Użyłem zdalnego debora Pythona - winpdb i jest to embedded debugging.

  1. zainstalować winpdb w swojej virtualenv

    pip install winpdb 
    
  2. import i uruchomić wbudowany debugger w kodzie:

    import rpdb2 
    rpdb2.start_embedded_debugger('pass') 
    
  3. run gunicorn z --timeout argumentu

    gunicorn -t 3600 env:application 
    
  4. uruchom odpowiedni widok za pomocą przeglądarki np. http://127.0.0.1:8000/your-view/

  5. podłączyć do wbudowanego debuggera użyciu winpdb:

    winpdb -a /path/to/django/app/views.py 
    

    on poprosi o hasło (użyj jednego ustawić w kodzie, w moim przykładzie jest to „przejście”) i uruchomić ładne GUI z debugger.

  6. jeśli potrzebujesz samouczek dla winpdb - here You are.

enter image description here