How to debug a rails app in docker with pry?

2019-03-09 22:07发布

I have a rails app running in a docker container in development environment.

When I try to debug it with placing binding.pry somewhere in the code and attaching to the container I can see the pry prompt in the output but it doesn't pause on it and I can't interact with it like it was without docker container.

So how do I debug a containerized app?

5条回答
我只想做你的唯一
2楼-- · 2019-03-09 22:34

If you don't use docker-compose though, you can simply run the container with -it option.

For example:

docker run -v /Users/adam/Documents/Rails/Blog/:/usr/src/app -p 3000:3000 -it blog
查看更多
我只想做你的唯一
3楼-- · 2019-03-09 22:48

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.

查看更多
Rolldiameter
4楼-- · 2019-03-09 22:50

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

查看更多
We Are One
5楼-- · 2019-03-09 22:50

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.

查看更多
啃猪蹄的小仙女
6楼-- · 2019-03-09 22:53

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/

查看更多
登录 后发表回答