web-dev-qa-db-ja.com

pryを使用してdockerでRailsアプリをデバッグするには?

開発環境のdockerコンテナーで実行されているRailsアプリがあります。

コードのどこかにbinding.pryを配置してコンテナにアタッチしてデバッグしようとすると、出力にpryプロンプトが表示されますが、一時停止せず、対話できません。 Dockerコンテナがない場合と同様です。

それでは、コンテナ化されたアプリをどのようにデバッグしますか?

33
fey

Docker-composeを使用している場合、これらのフラグをdocker-compose.ymlに追加できます。

app:
  tty: true
  stdin_open: true

そして、docker attach project_app_1を使用してプロセスにアタッチします。 pry-Railsはここで動作します。最適なこじ開け体験のために、lessがコンテナにインストールされていることを確認してください。

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

54
Gabe Kopley

pryを使用するには、別の方法で実行する必要があります。

docker-compose run --service-ports web

詳細については、この記事をご覧ください。

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

24
Terri Chu

Gabe Kopley答えとして、Railsコンテナはappと呼ばれ、stdin_openttytrue

app:
  stdin_open: true
  tty: true

生活を楽にするためにbashスクリプトを書き、bin/devに保存しました:

#!/bin/bash
docker-compose up -d && docker attach $(docker-compose ps -q app)

devchmod +x bin/devによって実行可能にすることを忘れないでください

端末でbin/devと入力すると、コンテナが自動的に実行され、アプリコンテナがアタッチされます。 binding.pryが呼び出されると、端末に直接入力できます。

8
Yi Feng Xie

Passengerでこじ開けを実行しているときに同じ問題が発生しました。 Gemfileの"pry-Rails"gem "pry-remote"に変更してみてください。これにより、dRuby、または依存関係のない分散プロトコルが開始されます。

実行中のコードを停止する場所"binding.remote_pry"ではなく"binding.pry"を呼び出します

次に、コンソールでremote-pryを呼び出してアクセスします。同じように動作するはずです。テスト環境では、通常のbinding.pryが正常に機能します。

5
kalyco

ただし、docker-composeを使用しない場合は、-itオプションでコンテナを実行するだけです。

例えば:

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