How to debug a rails app in docker with pry?
to use pry you have to run it differently:
docker-compose run --service-ports web
check out this article for more info:
http://blog.carbonfive.com/2015/03/17/docker-rails-docker-compose-together-in-your-development-workflow/
I had this same issue when I was running pry in Passenger. Try changing "pry-rails"
in the Gemfile to gem "pry-remote"
, which will initiate a dRuby, or distributed protocol with no dependencies.
Where you want to stop the code in execution call "binding.remote_pry"
as opposed to "binding.pry"
Then just call remote-pry
in the console to access it. It should work the same. In your test environment just the usual binding.pry
works fine.
as Gabe Kopley answer, assume your rails container is called app
, set stdin_open
and tty
to true
:
app:
stdin_open: true
tty: true
and I wrote a bash script to make life easier, save it to bin/dev
:
#!/bin/bash
docker-compose up -d && docker attach $(docker-compose ps -q app)
don't forget to make dev
be executable by chmod +x bin/dev
In your terminal, type bin/dev
, it will automatically run up containers and attach the app container. when binding.pry
called, you can type to the terminal directly.
If you're using docker-compose, you can add these flags to docker-compose.yml
:
app:
tty: true
stdin_open: true
And then attach to your process with docker attach project_app_1
. pry-rails
works here now. Ensure less
is installed on your container for the optimal pry experience.
cf. https://github.com/docker/compose/issues/423#issuecomment-141995398