Docker環境でbyebugを使用するための方法

Railsデバッグをしようと思い少しできるまでに時間がかかったので、備忘録として記録。

 

該当のコントローラにbyebugを記入し、"byebug ファイル名"でデバッグ用画面を開くところまではいけた。

しかしnやsで実行をしようとすると uninitialized constant ApplicationController というエラーが出た。

 

「ApplicationControllerという初期化されていない定数があります」ってどういうこと・・・そもそもApplicationControllerって定数だったっけ・・・などと思いつつそのエラーメッセージで調べるも、有力な情報は出てこず。

 

このエラーメッセージから離れてbyebugについて調べていると、どうやらDocker環境でbyebugを使用するには追加設定が必要であることがわかった。具体的には、docker-compose.ymlに以下の設定を追記する。

 

# docker-compose.yml
services:
  web:
    stdin_open: true  #追加箇所
    tty: true #追加箇所

 

この後"docker-compose up --build -d"でDockerを再ビルドしたところ、Docker環境でも正常にbyebugを使えるようになった。

stdin_openが標準入力に関するステータス、ttyが標準出力を自端末にアタッチするかのステータスで、これらをtrueにすることでコンテナ内の標準出力とDockerを起動しているターミナルの標準出力が接続されるらしい。

要はDockerの出力結果がターミナルにも表示されるようになるということだが・・・標準入力・出力については正直よくわかっていない。なかなか手強そうな概念だった。以下の記事が良さそうだったので、今度時間のある時に読み込んでみよう(せんやつ)。

 

qiita.com

 

 

で、本題からは逸れるが、なぜかデバッグ用画面でこちらが入力している文字が表示されない。

正直打ち込む内容は"n"とか"s"とか"p 変数名"くらいの文字なので別に画面に表示されなくてもなんとかなるのだが、やはり不便だと感じはじめ、pry-byebugでは同じ事象が発生しないのであればpry-byebugに乗り換えようと思う。

 

参考

Docker環境でByebugを使う方法 - logicoffee プログラミング勉強日記

Docker環境でByebugを使う方法 | ゆみしん夫婦のブログ