ruby-on-rails - mundo - ruby on rails pdf español
¿Cómo depurar una aplicación de rails(3.2) iniciada por capataz? (2)
Si usa varios trabajadores con un entorno de rieles completos, podría usar el 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 podrás 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 ejecuta el depurador usando:
rdebug -c -p [PORT]
Estoy tratando de usar el capataz para iniciar mi aplicación de rieles. Desafortunadamente tengo dificultades para conectar mi IDE para la depuración.
Leí here acerca de usar
Debugger.wait_connection = true
Debugger.start_remote
para iniciar una sesión de depuración remota, pero eso realmente no funciona.
Pregunta: ¿Hay alguna forma de depurar una aplicación de rails (3.2) iniciada por un capataz? Si es así, ¿cuál es el enfoque?
Un enfoque es requerir el depurador normalmente en su archivo gem, y agregar el 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á detallado al respecto. En la consola de su capataz, puede escribir ciegamente irb
, y solo entonces verá aparecer un aviso. Bad UX, ¿verdad?
Otro enfoque (aumentativo) es seguir tus registros:
tail -f log/development.log
Espero que esto ayude.