2014-05-25 4 views
8

Le basi:PyCharm debug remoto - connessioni, ma non può avviare il debug

  • Ho un progetto Django che funziona bene (sia localmente che su un server remoto).
  • Avvio pycharm localmente utilizzando un profilo di "debug remoto" e sembra buono.

    Starting debug server at port 4000 
    Use the following code to connect to the debugger: 
    import pydevd 
    pydevd.settrace('<my local machines public ip addr>', port=4000, suspend=False) 
    Waiting for connection... 
    
  • Sul server remoto, ho messo la chiamata appropriata per PyCharm-debug.egg in __init__.py (ma ho provato a mettere in altri punti del codice, anche).

  • ho avviare il server remoto come questo python manage.py runserver <remote domain name>:8000 e sul PyCharm IDE/debugger locale vedo:

    "Connected to pydev debugger (build 133.1347)" 
    
  • Dopo questo, le cose semplicemente seduto lì ... non ho ricevuto alcune risposte su dove l'esecuzione è e nessuna abilità nell'IDE di pycharm per "avviare/continuare/eseguire" qualcosa.

  • Sul server remoto se <ctrl-c>, lo vedo:

    File "/<path here>/pycharm-debug.egg/pydevd.py", line 1256, in settrace 
    File "/<path here>/pycharm-debug.egg/pydevd.py", line 1305, in _locked_settrace 
    

La mia ipotesi è che tutto è collegato correttamente, ma non sto vedendo un modo per iniziare tutto in esecuzione. Ho "suspend = False" quindi mi sarei aspettato che iniziasse. Quando provo a richiamare una pagina contro il server remoto, ottengo "non connesso" quindi il server Web non è ovviamente ancora in esecuzione (se curl http://<remote server domain>:8000 ottengo curl: (7) Failed connect to <remote server domain>:8000; Connection refused). Senza il debug remoto, funziona perfettamente con la mia macchina di sviluppo locale o sul server remoto.

Cosa sto sbagliando? :) Grazie!

Dettagli:

  • Sul server remoto che esegue il codice/processo che voglio eseguire il debug nel principale __init__.py ho:

    import os 
    import sys 
    BASE_DIR = os.path.dirname(os.path.dirname(__file__)) 
    sys.path.append(BASE_DIR + '/pycharm-debug.egg') 
    import pydevd 
    pydevd.settrace('<my local machines public ip addr>', port=4000, suspend=False) 
    
  • locale PyCharm IDE mostra questo:

    Starting debug server at port 4000 
    Use the following code to connect to the debugger: 
    import pydevd 
    pydevd.settrace('localhost', port=4000, suspend=False) (tried with <public ip addr> for this, too. 
    Waiting for connection... 
    ---- and then, after I start the remote server process: ---- 
    Connected to pydev debugger (build 133.1347) 
    

Altre note:

  • Ho provato questo con e senza virtualenv sul server remoto.
  • Sto eseguendo l'IDE pycharm locale dietro un normale router modem via cavo Comcast con port-forwarding per la porta 4000 attivata (e testato con un server nodo che si collega alla porta 4000 che ha funzionato bene quando ho fatto un wget contro di esso da il mio server remoto).

Sono in perdita su come "eseguire il bump" di qualsiasi cosa per far funzionare le cose e avviare il debug.

Grazie per aver cercato di aiutare.

+0

a volte, pycharm ha solo bisogno di un riavvio ... davvero. –

+0

heh, sì ... ci ho provato anche un paio di volte. :) –

+0

hai anche rilasciato il comando 'suspend = False'? che dice esplicitamente di non impostare un breakpoint (controlla la mia risposta) –

risposta

2

Per me, è stato eliminato il parametro suspend=False.

I documenti dicono @param suspend: whether a breakpoint should be emulated as soon as this function is called..

Se lo si lascia lì, è il collegamento, ma non considerando il punto di interruzione. Si dovrebbe quindi fondamentalmente utilizzare un altro pydevd.settrace('ip.addr') -> informazione suspend

+0

ok, è interessante ... ci proveremo domani. –

+0

Sfortunatamente, questo non lo ha fatto per me. –

3

Ho avuto gli stessi sintomi e "fisso" che spegnendo tutti Python Eccezione punti di interruzione nella finestra divista Punti di interruzione.

+0

Sembra che potrebbe fare il trucco. Sono passato completamente al debug remoto via ssh, quindi quando avrò la possibilità di provare di nuovo, lo proverò. Se funziona, tornerò indietro e selezionerò questa come risposta (potrebbe essere un po ', però). –

6

Per i googler futuri ... Sono riuscito a ottenere il debug remoto funzionante, ma non tramite questo metodo. Ho appena risposto a una domanda simile su questo nei forum di pycharm, quindi ho pensato di aggiornare questa domanda con il metodo che ha funzionato per me.

  1. Passare a "PyCharm/Preferences/Project Interpreter".
    • Vedrai un'opzione per scegliere quale interprete python nella parte superiore della finestra di dialogo. Accanto a ciò è un'icona dell'ingranaggio. Se fai clic sull'icona a forma di ingranaggio, vedrai un'opzione per "Aggiungi remoto" ... le tue credenziali ssh (o percorso per le chiavi ssh) e il percorso verso il quale il tuo interprete python è installato sul server remoto (es. , /usr/local/bin/python).
    • Inoltre, il "percorso dei pycharm helper" era per me (/home/<username>/.pycharm_helpers - Non ricordo se è stato creato automaticamente o meno).
  2. Andare a "Esegui/Modifica configurazioni ..." e aggiungere un "Server Django" (più il segno in alto a sinistra nella finestra di dialogo).

    • Scegliere il nuovo interprete python remoto come interprete da utilizzare (dovrebbe essere visualizzato in un elenco a discesa di scelte).
    • Nella sezione "env vars" avevo bisogno di specificare il mio file delle impostazioni principali dell'app (ad esempio, DJANGO_SETTINGS_MODULE = <app>/settings.py). Per i miei scopi ho anche bisogno di impostare HTTPS=1.
    • Imposta la directory di lavoro ovunque il tuo progetto django si trovi sul server remoto (ad esempio, /home/<username>/<xyz>/<appdir>).
    • Impostare i mapping dei percorsi dalla directory locale alla directory remota (ad esempio, /Users/JohnQ/<xyz>/<appdir>=/home/<username>/<xyz>/<appdir>).

    • Perché avevo bisogno di altri server di terze parti (come FB, ecc.) Per poter colpire questo server usando HTTPS, ho usato "stunnel" sul mio server remoto - è stato piuttosto facile da configurare).

  3. Oltre a questo, una cosa utile da fare è impostare la conferma dispiegamento pure in modo che si può semplicemente fare clic destro per caricare le versioni più recenti del file (in "Strumenti/distribuzione/Configurazioni .. . ").

    • Creare uno nuovo e sotto la connessione basta utilizzare credenziali ssh o percorso per le chiavi.
    • Nella scheda mapping, i percorsi sono gli stessi di quelli utilizzati per i mapping dei percorsi per l'installazione del server remoto.
    • "Percorso web sul server" era solo "/" per me.Dopo averlo creato, dovresti semplicemente fare clic con il pulsante destro del mouse su qualsiasi file/cartella e scegliere "Carica in ...". Si noti che per un caricamento iniziale ho appena scaricato un tar.gz sul mio server per risparmiare tempo e carico solo tramite la configurazione di distribuzione per le modifiche apportate durante il debug.

Sono stato felicemente utilizzato questo per il debug remoto per ~ 4 mesi., In modo che funziona bene.

+0

Belle modifiche! Questo sarà molto più comprensibile. :) –

+0

** NOTA **: Nella seconda parte, quando crei un nuovo server Django, hai dimenticato di menzionare ** Host **. È necessario aggiungere l'IP del server remoto per farlo funzionare. – aldoblack

+0

E grazie per questo. Funziona. – aldoblack