10
votes

Django Gunicorn Debug

Au départ, j'ai eu une application Django avec le serveur de test inclus. Pour déboguer cette configuration, je peux simplement ajouter un importer pdb; pdb.set_trace () n'importe où dans le code et avoir un point de rupture qui me jette dans un débogueur interactif en terminal (sur la ligne de commande).

Récemment, j'ai changé à Guncorn pour gagner des benifits perfs. Comment puis-je obtenir un comportement similaire lors de l'utilisation de cette configuration de Gunicorn. J'ai essayé en définissant des paramètres de gunlorn avec débog = true et daemon = false mais cela ne fonctionne pas.

Quelqu'un a une solution à cela?


4 commentaires

Avez-vous découvert comment le faire fonctionner?


Oui, veuillez lire ma réponse. C'est ce que je fais maintenant ...


J'ai réussi à utiliser GunCorn et IPDB ensemble. Voir ma réponse ci-dessous. Je suggère également de définir le délai d'attente à une plus grande valeur, vous avez donc le temps de déboguer.


Pourquoi n'avez-vous pas accepté votre propre réponse?


5 Réponses :


2
votes

Si vous êtes en mesure de lancer GunCorn pointant sur une instance code> code> une instance de la classe code> débroggedApplication code> à partir de la bibliothèque code> werkzeugn code> bibliothèque, vous Sera capable de définir des points de rupture à l'aide du débogueur Werkzeug avec Import IPDB; ipdb.set_trace () code> directement dans votre navigateur.

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

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


1 commentaires

@ Calvin-Cheng: Je ne sais pas comment cela est censé travailler. D'abord, je devrais avoir une exception non gérée afin que le débogueur Werzeug Traceback devienne visible dans l'interface utilisateur (c'est-à-dire le navigateur Web). Ça marche. D'entre eux ligne de commande dans l'interface utilisateur IMPORT IMPORT IPDB; ipdb.set_trace (). Cela provoque une exception, me semble que IPDB n'aime pas sa console (il semble être une classe HTML *, qui ne semble pas complètement tort lorsqu'il devrait fonctionner dans le navigateur.)



0
votes

Qu'est-ce que j'ai finalement fini par faire est exécuté python manage.py runserver : 8000 Quand je veux utiliser pdb .

Vous devez donc avoir 2 référentiels différents dans la même machine, une construction de la production en direct (l'une exécution gundicorn ) et l'autre étant la construction de test, celle que j'ai besoin de déboguer sur où J'utilise pdb . Lorsque les choses semblent stables sur la construction de test, je fusionner la branche de test avec branche live . Aucun développement ou modification n'a lieu sur branche live de cette façon, j'évite la fusion de conflits.

Espérons que cela aide les autres personnes accro à pdb ;)


3 commentaires

Cela fait en réalité pas fonctionne si vous avez le proxy inverse de HTTPS (E.G. NGINX)


@Kimvais oui vous êtes correct. Si vous savez faire cela en présence d'un proxy http inverse, je suis intéressé à connaître la configuration ...


Je sais seulement comment faire ça à Pycham, mettrea postera comme une réponse



2
votes

J'ai réussi maintenant à utiliser Gunicron avec Djnago et IPDB.

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

J'utilise Django 1.4 et Gunicorn 0.16.1. Ensuite, vous pouvez normalement utiliser le Import IPDB; ipdb.set_trace () dans le code. Il n'y a pas besoin de la bibliothèque werkzeugn .

J'essaie de déboguer une application Facebook, donc je ne peux donc pas utiliser le serveur de développement, car Facebook tente d'utiliser SSL et le serveur DEV ne peut tout simplement pas répondre correctement

Pendant que je cherchais une solution, j'ai trouvé un post PDB: Utilisation Le débogueur Python de Django qui suggère d'exécuter python -m pdb manage.py runserver tout le temps. Bien que cela ne soit pas nécessaire avec Django's Dev Server, j'ai décidé de tenter avec Gunicordn et IPDB et cela a fonctionné.


0 commentaires

5
votes

Pour exécuter une licorne verte dans une configuration de proxy inverse (sous NGinx) dans un mode de débogueur / débogage, entrez les paramètres suivants dans PYCHARM S RUN / DJANGO / Modifier les configurations:

Bien sûr, utilisez n'importe quel port (au lieu de 7777 ), vous avez configuré votre nginx à proxy à.

capture d'écran


2 commentaires

Qu'est-ce qui utilise GUI pour Python: D?


Cela n'aide pas vraiment. OP veut utiliser pdb , pas l'interface graphique de Pycham à déboguer.



4
votes

OK, j'ai récemment scénagé sur un problème similaire. Je n'ai pas pu appliquer une solution @dudklein (je reçois des erreurs d'E / S tandis que le débogueur essayait de prendre des entrées - IPDB, PDB, etc.)

J'ai utilisé Python distant debbuger - WinPDB et c'est Débogage incorporé . P>

  1. Installez WinPDB dans votre Virtualenv P> XXX PRE> LI>

  2. Importer et exécuter du débogueur intégré dans votre code: P> XXX PRE> LI>

  3. Run GunCorn avec -Timeout argument p> XXX PRE> LI>

  4. Exécuter une vue appropriée à l'aide du navigateur, par exemple. http://127.0.0.1:8000/Your-View/ code> p> li>

  5. Connectez-vous au débogueur embarqué à l'aide de WinPDB: P>

    winpdb -a /path/to/django/app/views.py
    
  6. Si vous avez besoin de tutoriel pour winpdb code> - Ici vous êtes . P> LI> ol>

    Entrez la description de l'image ici p> p>


0 commentaires