2012-03-04 10 views
17

Sto provando ad usare il caporeparto per avviare la mia app per rotaie. Purtroppo ho difficoltà a connettere il mio IDE per il debug.Come eseguire il debug di un'app rails (3.2) avviata da Foreman?

ho letto here sull'utilizzo

Debugger.wait_connection = true 
Debugger.start_remote 

per avviare una sessione di debug remoto, ma che in realtà non funzionano.

Domanda: C'è un modo per eseguire il debug di un'app rails (3.2) avviata da Foreman? Se sì, qual è l'approccio?

risposta

28

Se si utilizzano diversi lavoratori con l'ambiente rotaie piene è possibile utilizzare il seguente inizializzatore:

# Enabled debugger with foreman, see https://github.com/ddollar/foreman/issues/58 
if Rails.env.development? 
    require 'debugger' 
    Debugger.wait_connection = true 

    def find_available_port 
    server = TCPServer.new(nil, 0) 
    server.addr[1] 
    ensure 
    server.close if server 
    end 

    port = find_available_port 
    puts "Remote debugger on port #{port}" 
    Debugger.start_remote(nil, port) 
end 

E nei registri del caposquadra sarete in grado di trovare le porte del debugger:

$ foreman start 
12:48:42 web.1  | started with pid 29916 
12:48:42 worker.1 | started with pid 29921 
12:48:44 web.1  | I, [2012-10-30T12:48:44.810464 #29916] INFO -- : listening on addr=0.0.0.0:5000 fd=10 
12:48:44 web.1  | I, [2012-10-30T12:48:44.810636 #29916] INFO -- : Refreshing Gem list 
12:48:47 web.1  | Remote debugger on port 59269 
12:48:48 worker.1 | Remote debugger on port 41301 

Ora eseguire debugger utilizzando:

rdebug -c -p [PORT] 
+0

Chiaramente, è necessario più upvotes. Grazie a te, finalmente * ho ottenuto questo risultato. Grazie! – Jimmy

+0

Per completezza, il passo finale è connettersi al debugger in una shell separata con 'rails -c -p [PORT]' – Philipp

+1

@Philipp - Intendevi '' 'rdebug -c -p [PORT]' ''? L'uso del comando '' rails''' non ha funzionato per me. –

3

Un approccio è richiedere normalmente il debugger nel tuo gemfile e aggiungere debugger normalmente nel codice in base alle esigenze. Quando il server raggiunge quella linea, si fermerà, ma il caposquadra non sarà dettagliato. Nella tua console foreman puoi alla cieca digitare irb, e solo allora vedrai apparire un prompt. Bad UX, giusto?

Un altro approccio (aumentativa) è quello di coda il vostro log:

tail -f log/development.log 

Spero che questo aiuti.