¿Cómo depurar una aplicación rails en docker con pry?


Tengo una aplicación rails ejecutándose en un contenedor docker en el entorno de desarrollo.

Cuando intento depurarlo colocando binding.pry en algún lugar del código y adjuntándolo al contenedor, puedo ver el mensaje pry en la salida, pero no se detiene y no puedo interactuar con él como si fuera sin el contenedor docker.

Entonces, ¿cómo depuro una aplicación en contenedores?

Author: fey, 2016-02-05

4 answers

Si está utilizando docker-compose, puede agregar estas banderas a docker-compose.yml:

app:
  tty: true
  stdin_open: true

Y luego adjuntar a su proceso con docker attach project_app_1. pry-rails funciona aquí ahora. Asegúrese de que less esté instalado en su contenedor para una experiencia óptima de palanca.

Cf. https://github.com/docker/compose/issues/423#issuecomment-141995398

 42
Author: Gabe Kopley,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-12 16:57:00

Para usar pry tienes que ejecutarlo de manera diferente:

docker-compose run --service-ports web

Echa un vistazo a este artículo para más información:

Http://blog.carbonfive.com/2015/03/17/docker-rails-docker-compose-together-in-your-development-workflow/

 17
Author: Terri Chu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-05-11 19:16:07

Tuve este mismo problema cuando estaba ejecutando pry en Pasajero. Intente cambiar "pry-rails" en el Gemfile a gem "pry-remote", lo que iniciará un protocolo dRuby o distribuido sin dependencias.

Donde desea detener el código en la llamada de ejecución "binding.remote_pry" en lugar de "binding.pry"

Luego simplemente llama a remote-pry en la consola para acceder a él. Debería funcionar igual. En su entorno de prueba solo el binding.pry habitual funciona bien.

 5
Author: kalyco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-02-04 21:16:13

Si no usa docker-compose, simplemente puede ejecutar el contenedor con la opción -it.

Por ejemplo:

docker run -v /Users/adam/Documents/Rails/Blog/:/usr/src/app -p 3000:3000 -it blog
 1
Author: Adam Sibik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-08 20:21:26