2014-01-21 8 views
24

Ist es möglich, eine uwsgi-Anwendung mit einer IDE wie PyCharm zu debuggen? Ich kann flaschenbasierte Apps gut debuggen, indem ich sie direkt von pycharm aus laufe, kann aber nicht einmal eine uwsgi-App aus pycharm heraus ausführen.debuggen einer uwsgi python-anwendung mit pycharm

Muss ich Remote-Debugging verwenden? Ist es möglich, eine uwsgi-App innerhalb von pycharm mit run zu starten?

+1

Wenn Ihre wsgi-App von einem Python-Skript aus startet, ist das sehr gut möglich. –

Antwort

18

Sie können Ihre WSGI-App auch außerhalb von uWSGI für Entwicklungs- und Debugging-Zwecke ausführen.

Manchmal ist dies jedoch nicht möglich, z. B. wenn Ihre App auf uWSGI-API-Funktionen basiert.

Soweit ich weiß, können Sie "Attach to Process" nicht von PyCharm verwenden, da Ihre WSGI App in uWSGI eingebettet ist und es keine sichtbaren Python-Prozesse gibt. Remote debugging funktioniert jedoch wie ein Charme.

  1. Lokalisieren Sie pycharm-debug*.egg Dateien in Ihrer PyCharm-Distribution. Zum Beispiel auf OSX kann sowohl in /Applications/PyCharm.app/Contents

  2. kopieren pycharm-debug-py3k.egg neben Ihrem Flask App zu finden, oder kopieren pycharm-debug.egg statt, wenn Sie Python 2.7

  3. In PyCharm verwenden, erstellen Sie ein "Python Remote-Debug" -Konfiguration aus dem "Run/Debug Konfigurationen" -Dialog. In diesem Beispiel verwende ich localhost und Port 4444. Dieser Dialog zeigt Ihnen die entsprechende pydevd.settrace(...) Zeile.

  4. Fügen Sie den folgenden Code in Ihre App:

    import sys 
    sys.path.append('pycharm-debug-py3k.egg') # replace by pycharm-debug.egg for Python 2.7 
    import pydevd 
    # the following line can be copied from "Run/Debug Configurations" dialog 
    pydevd.settrace('localhost', port=4444, stdoutToServer=True, stderrToServer=True) 
    
  5. In PyCharm, die Remote-Debugging-Sitzung starten. PyCharm der Konsole sollte die folgende Zeile angezeigt werden:

    Waiting for process connection... 
    
  6. Führen Sie Ihre App von uwsgi wie gewohnt. Es sollte an den Debugger anhängen und PyCharm der Konsole angezeigt werden soll:

    Connected to pydev debugger (build 139.711) 
    
  7. Ihre App auf dem pydevd.settrace(...) Linie brechen sollte. Sie können dann den PyCharm-Debugger wie gewohnt fortsetzen (Breakpoints usw.)

2

Nicht sicher, wie man Ihre Frage interpretiert, wie Sie Äpfel und Orangen mischen. Flask ist ein Framework, uWSGI ist ein Anwendungsserver. Ich werde versuchen zu antworten.

Soweit ich weiß, uWSGI ist nicht pure Python, so Debugging in PyCharm wird nicht trivial sein, wenn es überhaupt möglich ist.

Da Sie jedoch uwsgi verwenden, um Ihre Anwendung auszuführen, ich nehme an, es mit dem WSGI protocol entspricht. In diesem Fall können Sie es zu Debuggingzwecken alternativ von einer einfachen Python-Anwendungs-Engine wie wsgiref.simple_server.WSGIServer ausführen.