markdown 在docker容器中运行binding.pry

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown 在docker容器中运行binding.pry相关的知识,希望对你有一定的参考价值。

First, add pry-rails to your Gemfile:  
https://github.com/rweng/pry-rails

```ruby
gem 'pry-rails', group: :development
```

Then you'll want to rebuild your Docker container to install the gems

```sh
docker-compose build
```

You should now be able to add a break point anywhere in your code

```ruby
binding.pry
```

The problem is that Docker just kind of ignores it and moves on. In order to actually halt execution and use pry as normal, you have to these options to docker-compose.yml:

```yaml
services:
  rails:
    stdin_open: true
    tty: true
```

Source: http://stackoverflow.com/a/37264588/1042144

The next time `binding.pry` is executed, the process should halt and display an IRB-like console on the rails server screen. But you still can't use it directly. You have to attach a terminal to the docker container.

In order to attach to a docker container, you need to know what its ID is. Use `docker ps` to get a list of the running containers and their ids.

```sh
docker ps
```

Source: https://www.liquidweb.com/kb/how-to-list-and-attach-to-docker-containers/

Then you can use the numeric ID to attach to the docker instance:

```sh
docker attach 75cde1ab8133
```

It may not immediately show a rails console, but start typing and it should appear. If you keep this attached, it should show the rails console prompt the next time you hit the pry breakpoint.

Neat things you should try with pry:

```ruby
show-routes
show-models
show-source edit  # If you're in a controller, for instance

cd                # Navigate up or down class hierarchies. try `cd BasicObject`
ls                # Check out what's inside of a class - variables, etc.
```

And of course you can access local variables just by typing their names.

```ruby
params
#=> <ActionController::Parameters {"controller"=>"lists", "action"=>"index"} permitted: false>
```

To end your pry-rails session, you can type exit as you would exit any irb instance.

```ruby
exit
```

However, this does not detach the terminal from the docker container. This can be useful to continue debugging.

Additionally, I had two terminals open, one to review the server log and one to attach to my container to use pry-rails, but docker will timeout the server log while the attached terminal  continues to run the rails server process. I'm okay with that - I can just leave the terminal attached. However, if you want to detach from the container without ending the process, you need to press ctrl-p + ctrl-q.

Source: http://stackoverflow.com/a/19689048/1042144

以上是关于markdown 在docker容器中运行binding.pry的主要内容,如果未能解决你的问题,请参考以下文章

markdown 显示未在Docker中运行的容器

markdown 通过Kubernetes运行Docker容器(正在进行中)

markdown 如何在Racnher中的所有主机上运行Docker容器?

无法在 Docker 容器中运行命令

如何在 Docker 容器中挂载 --bind?

Docker 容器中的 jgroup_bind_addr