2012-11-03 13 views
7

Inizialmente avevo un'app Django con il server di test incluso. Per eseguire il debug di questa configurazione, posso semplicemente aggiungere uno import pdb; pdb.set_trace() ovunque nel codice e avere un punto di rottura che mi lancia in un debugger interattivo in Terminale (su riga di comando).Django Gunicorn Debug

Recentemente mi sono spostato su gunicorn per ottenere alcuni vantaggi. Come posso ottenere un comportamento simile durante l'utilizzo di questa configurazione di Gunicorn. Ho provato impostando le impostazioni di gunicorn con debug=True e daemon=False ma non funziona.

Chiunque ha una soluzione a questo?

+0

Hai trovato il modo di farlo funzionare? – duduklein

+0

sì, per favore leggi la mia risposta. questo è quello che faccio adesso ... –

+0

Sono riuscito a usare gunicorn e ipdb insieme. vedi la mia risposta qui sotto. Suggerisco anche di impostare il timeout su un valore più grande, in modo da avere il tempo di eseguire il debug. – duduklein

risposta

4

Per eseguire unicorno verde in una configurazione proxy inverso (sotto nginx) in una modalità debugger/debug, immettere le seguenti impostazioni in Run/Django/modificare le configurazioni PyCharm s':

Naturalmente, utilizzare qualsiasi porta (invece di 7777) hai configurato il tuo nginx al proxy.

Screenshot

+1

cosa usare la GUI per python: D ? – holms

+0

Questo non aiuta davvero. op vuole usare 'pdb', non la GUI di PyCharm per eseguire il debug. – WhyNotHugo

2

Se si è in grado di lanciare gunicorn indicando un'istanza application che è un'istanza della classe DebuggedApplication dalla libreria werkzeug, si sarà in grado di impostare i punti di interruzione utilizzando il debugger werkzeug con import ipdb; ipdb.set_trace() direttamente nel tuo browser.

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

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

Assicurarsi di installare libreria werkzeug e ipdb, naturalmente. (pip install werkzeug e)

+0

questo non ha funzionato – duduklein

+0

@ calvin-cheng: Non so come dovrebbe funzionare. Per prima cosa dovrei ottenere un'eccezione non gestita in modo che il debugger di traceback di Werzeug diventi visibile nell'interfaccia utente (ad esempio il browser Web). Che funzioni. Da loro la linea di comando nell'interfaccia utente chiamo importazione ipdb; ipdb.set_trace(). Questo causa un'eccezione, mi sembra che ipdb non apprezzi la sua console (sembra essere una classe HTML *, che non suona completamente errata quando dovrebbe funzionare nel browser.) –

0

Quello che ho finito per fare è eseguire python manage.py runserver <your_external_IP>:8000 quando voglio usare pdb.

Quindi è necessario disporre di due repository diversi nella stessa macchina, uno in produzione LIVE (quello in esecuzione gunicorn) e l'altro in build TEST, uno di cui è necessario eseguire il debug su dove utilizzo pdb. Quando le cose sembrano stabili in TEST build unisco lo TEST branch con LIVE branch. Nessuno sviluppo o modifiche si verificano su LIVE branch in questo modo evito conflitti di unione.

Speriamo che questo aiuta gli altri che sono dipendenti da pdb;)

+0

grazie per aver condiviso la tua soluzione. Lo apprezzo. Sono riuscito a farlo funzionare e ho anche condiviso il mio. – duduklein

+2

Questo in realtà funziona _NOT_ se si dispone del proxy inverso https (ad esempio nginx) – Kimvais

+0

@Kimvais sì, si è corretto. se sai come fare questo in presenza di un proxy HTTP inverso, sono interessato a conoscere il setup ... –

2

sono riuscito subito a utilizzare gunicron con djnago e IPDB.

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

sto usando Django 1.4 e gunicorn 0.16.1. quindi puoi normalmente utilizzare import ipdb; ipdb.set_trace() nel codice. Non è necessaria la libreria werkzeug.

Sto cercando di eseguire il debug di un'applicazione facebook, quindi non posso utilizzare la configurazione in server di sviluppo, perché Facebook tenta di utilizzare SSL e il server dev proprio non può rispondere adeguatamente

Mentre stavo cercando per una soluzione, ho trovato un post pdb: Using the Python debugger in Django che suggerisce di eseguire python -m pdb manage.py runserver tutto il tempo. Sebbene questo non sia necessario con il server di sviluppo di django, ho deciso di provarlo con gunicordn e ipdb e ha funzionato.

3

Ok Ho recentemente stumbed sul problema simile. Non ero in grado di applicare la soluzione @dudklein (ho avuto errori I/O mentre il debugger stava cercando di prendere input - ipdb, pdb ecc.)

Ho usato il depuratore python remoto - winpdb ed è embedded debugging.

  1. installare Winpdb nel tuo virtualenv

    pip install winpdb 
    
  2. importazione ed eseguire debugger incorporato nel codice:

    import rpdb2 
    rpdb2.start_embedded_debugger('pass') 
    
  3. corsa gunicorn con argomento --timeout

    gunicorn -t 3600 env:application 
    
  4. eseguire la vista corretta utilizzando il browser es. http://127.0.0.1:8000/your-view/

  5. connettersi al debugger incorporato utilizzando Winpdb:

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

    vi verrà chiesto di inserire una password (utilizzare una possibile impostare nel codice, nel mio esempio è 'pass') e gestito grafica piacevole con debugger.

  6. se è necessario il tutorial per winpdb - here You are.

enter image description here

Problemi correlati