2016-02-04 58 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