2012-03-04 6 views
17

Estoy tratando de usar capataz para iniciar mi aplicación de rieles. Lamentablemente, tengo dificultades para conectar mi IDE para la depuración.¿Cómo depurar una aplicación de carriles (3.2) iniciada por el capataz?

leí here sobre el uso de

Debugger.wait_connection = true 
Debugger.start_remote 

para iniciar una sesión de depuración remota, pero que en realidad no funcionó.

Pregunta: ¿Hay una manera de depurar un (3.2) de aplicaciones iniciadas por los carriles capataz? Si es así, ¿cuál es el enfoque?

Respuesta

28

Si utiliza varios trabajadores con el medio ambiente carriles completos se puede utilizar la siguiente inicializador:

# 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 

Y en los registros del capataz usted será capaz de encontrar los puertos del depurador:

$ 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 

Ahora ejecutar depurador usando:

rdebug -c -p [PORT] 
+0

Claramente, usted necesita más votos positivos. Gracias a ti, * finalmente * hice que esto funcionara. ¡Gracias! – Jimmy

+0

Para completar, el último paso es conectar al depurador en una cáscara separada con 'rieles -c -p [PORT]' – Philipp

+1

@Philipp - ¿Se refiere a '' '-p -c rdebug [PORT]' ''? Usar el comando '' 'rails''' no funcionó para mí. –

3

Un enfoque consiste en requerir depurador normalmente en su Gemfile, y añadir debugger normalmente en su código según sea necesario. Cuando el servidor llegue a esa línea, se detendrá, pero el capataz no será prolijo al respecto. En la consola capataz puede ciegamente tipo irb, y sólo entonces, aparecerá una solicitud. Bad UX, ¿verdad?

Otro enfoque (aumentativo) es la cola sus registros:

tail -f log/development.log 

Espero que esto ayude.

Cuestiones relacionadas