Remote-Debugging von PyCharm - verbindet, kann das Debuggen jedoch nicht starten

9

Die Grundlagen:

  • Ich habe ein Django-Projekt, das gut läuft (sowohl lokal als auch auf einem Remote-Server).
  • Ich starte pycharm lokal mit einem "remote debugging" Profil und es sieht gut aus.

    %Vor%
  • Auf dem Remote-Server habe ich den entsprechenden Aufruf an pycharm-debug.egg in __init__.py gestellt (aber ich habe versucht, es auch an anderen Stellen im Code zu platzieren).

  • Ich starte den Remote-Server wie folgt python manage.py runserver <remote domain name>:8000 und auf dem lokalen pycharm IDE / Debugger sehe ich:

    %Vor%
  • Danach sitzen die Dinge einfach da ... Ich bekomme keine Rückmeldung darüber, wo die Ausführung ist und keine Fähigkeit in der pycharm IDE, irgendetwas "zu starten / fortzusetzen / auszuführen".

  • Auf dem Remote-Server, wenn ich <ctrl-c> it, sehe ich:

    %Vor%

Meine Vermutung ist, dass alles richtig verbunden ist, aber ich sehe keinen Weg, alles in Gang zu bringen. Ich habe "suspend = False", also hätte ich erwartet, dass es startet. Wenn ich versuche, eine Seite gegen den entfernten Server zu öffnen, bekomme ich "nicht verbunden", so dass der Webserver offensichtlich noch nicht läuft (wenn curl http://<remote server domain>:8000 Ich bekomme curl: (7) Failed connect to <remote server domain>:8000; Connection refused ). Ohne Remote-Debugging funktioniert das problemlos auf meinem lokalen Dev-Computer oder auf dem Remote-Server.

Was mache ich falsch? :) Danke!

Details:

  • Auf dem entfernten Server, auf dem der Code / Prozess läuft, den ich in __init__.py debuggen möchte, habe ich:

    %Vor%
  • Lokale pycharm IDE zeigt dies:

    %Vor%

Weitere Hinweise:

  • Ich habe das sowohl mit als auch ohne virtualenv auf dem entfernten Server versucht.
  • Ich betreibe die lokale pycharm-IDE hinter einem normalen Comcast-Kabelmodem-Router mit Port-Weiterleitung für Port 4000 (und testete dies mit einem Node-Server, der an Port 4000 angeschlossen ist), der funktionierte, wenn ich ein Wget dagegen machte mein Remote-Server).

Ich bin ratlos, wie ich irgendetwas "stoßen" kann, damit die Dinge laufen und ich kann mit dem Debuggen beginnen.

Danke, dass du versucht hast zu helfen.

    
John Q 25.05.2014, 02:18
quelle

3 Antworten

6

Für zukünftige Googler ... konnte ich Remote-Debugging funktionieren, aber nicht über diese Methode. Ich habe gerade eine ähnliche Frage in den Foren von pycharm beantwortet und dachte, ich würde diese Frage mit der Methode, die für mich funktioniert hat, aktualisieren.

  1. Gehen Sie zu "PyCharm / Preferences / Project Interpreter".
    • Sie sehen eine Option, um den Python-Interpreter oben im Dialog auszuwählen. Daneben ist ein Zahnradsymbol. Wenn Sie auf das Zahnradsymbol klicken, sehen Sie die Option "Remote hinzufügen" ... Sie geben ssh-Anmeldedaten (oder den Pfad zu ssh-Schlüsseln) und den Pfad zu Ihrem Python-Interpreter auf dem Remote-Server an (d , /usr/local/bin/python ).
    • Außerdem war der "pycharm helpers path" für mich ( /home/<username>/.pycharm_helpers - ich kann mich nicht erinnern, ob das automatisch erstellt wurde oder nicht).
  2. Gehe zu "Run / Edit Configurations ..." und füge einen "Django Server" hinzu (Pluszeichen oben links im Dialog).

    • Wählen Sie Ihren neuen Remote-Python-Interpreter als zu verwendenden Interpreter (er sollte in einer Dropdown-Liste mit Auswahlmöglichkeiten angezeigt werden).
    • Im Abschnitt "env vars" musste ich meine Hauptdatei für die App-Einstellungen angeben (d. h. DJANGO_SETTINGS_MODULE = <app>/settings.py ). Für meine Zwecke musste ich auch HTTPS=1 setzen.
    • Setzen Sie das Arbeitsverzeichnis auf den Speicherort Ihres django-Projekts auf dem Remote-Server (d. h. /home/<username>/<xyz>/<appdir> ).
    • Legen Sie die Pfadzuordnungen von Ihrem lokalen Verzeichnis zum entfernten Verzeichnis fest (d. h. /Users/JohnQ/<xyz>/<appdir>=/home/<username>/<xyz>/<appdir> ).

    • Da ich andere Server von Drittanbietern (wie FB usw.) brauchte, um diesen Server mit HTTPS zu erreichen, benutzte ich "Stunnel" auf meinem Remote-Server - es war ziemlich einfach einzurichten / p>

  3. Außerdem sollten Sie eine Bereitstellungsbestätigung einrichten, damit Sie einfach mit der rechten Maustaste klicken können, um neuere Versionen Ihrer Datei hochzuladen (unter "Tools / Deployment / Configurations ...").

    • Erstellen Sie eine neue Verbindung und verwenden Sie einfach ssh creds oder den Pfad zu Ihren Schlüsseln.
    • Auf der Registerkarte "Zuordnungen" sind die Pfade identisch mit denen, die Sie für die Pfadzuordnungen für die Einrichtung des Remoteservers ausgeführt haben.
    • "Webpfad auf dem Server" war nur " / " für mich. Nachdem Sie es erstellt haben, sollten Sie nur in der Lage sein, mit der rechten Maustaste auf eine Datei / ein Verzeichnis zu klicken und "Upload to ..." zu wählen. Beachten Sie, dass ich für einen anfänglichen Upload nur eine tar.gz auf meinen Server hochgeladen habe, um Zeit zu sparen, und ich nur über die Deployment-Konfiguration für die Änderungen hochladen, die ich während des Debugging mache.

Ich habe es glücklich für Remote-Debugging für ~ 4 mos verwendet, so funktioniert es gut.

    
John Q 21.09.2014 19:38
quelle
3

Ich hatte die gleichen Symptome und "reparierte" sie, indem ich alle Python Ausnahme Breakpoints im View Breakpoints Fenster deaktivierte.

    
user2016190 27.05.2014 00:39
quelle
2

Ich habe den suspend=False -Parameter weggelassen.

Die Dokumente sagen @param suspend: whether a breakpoint should be emulated as soon as this function is called. .

Wenn Sie es dort lassen, verbindet es sich, ohne den Haltepunkt zu berücksichtigen. Sie sollten dann grundsätzlich ein anderes pydevd.settrace('ip.addr') - & gt; notice no suspend

verwenden     
vlad-ardelean 25.05.2014 08:42
quelle

Tags und Links