2016-02-04 64 views
22

我有一个rails应用程序在开发环境中的Docker容器中运行。如何用pry在docker中调试rails应用程序?

当我尝试把binding.pry某处代码,并连接到容器我可以看到pry提示输出调试它,但它不会暂停它,我不能与它互动就像是没有码头集装箱。

那么如何调试一个容器化的应用程序?

回答

35

如果您使用泊坞窗,撰写,你可以将这些标志添加到docker-compose.yml

app: 
    tty: true 
    stdin_open: true 

然后用docker attach附加到您的流程。 pry-rails现在在这里工作。确保您的容器上已安装less,以获得最佳的撬体验。

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

5

我在Passenger中运行pry时遇到了同样的问题。尝试将Gemfile中的"pry-rails"更改为gem "pry-remote",这将启动dRuby或不依赖于分布式协议。

如果你想停止代码执行调用"binding.remote_pry"而不是"binding.pry"

然后,只需调用remote-pry在控制台访问它。它应该工作一样。在你的测试环境中,只有通常的binding.pry工作正常。

11

使用撬你必须以不同的方式运行:

docker-compose run --service-ports web

看看这篇文章的详细信息:

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

+0

虽然此链接可以回答这个问题,最好是在这里有答案的主要部件,并提供链接以供参考。如果链接页面更改,则仅链接答案可能会失效。 –

+0

这个解决方案对我来说并不合适,因为我的其他服务依赖于被链接到我想要调试的这个服务的正确实例。 –

0

如果您不使用docker-compose虽然,您可以简单地运行与-it选项的容器。

例如:

docker run -v /Users/adam/Documents/Rails/Blog/:/usr/src/app -p 3000:3000 -it blog