はじめに
Docker環境下でこんなシーンに遭遇したことはありませんか?
「Railsでバグ発生!デバッグしなきゃ!よーし、binding.pryしよう!」
↓
「うわ、コンソール出ない!!!これじゃ何も出来ない!!!」
こんなやるせない気持ちになった方のために、自分がこれまで詰まった箇所とその解決法を残しておこうと思います。
環境
OS: macOS Catalina 10.15.3
Ruby: 2.6.5
Rails: 6.0.2.1
Docker: 19.03.5
docker-compose: 1.24.1
1.binding.pryのコンソールが出ない
docker-compose upなどでrails serverを立ち上げていて、binding.pryを入力した箇所で動作が止まっているのに、
「コンソールが出ない!どうしよう!」
という状態を想定しています。
解決法
$docker container ls
でRailsアプリのあるコンテナ名を確認します。
※ここではrails_app_web_1とします。
↓
$ docker attach rails_app_web_1
docker attachで該当コンテナにattachします。
これで、binding.pryしたときにコンソールが表示されます。
※もし反応がなければ、Enter押下するとコンソールが出るかもです。
2.せっかくコンソールが出たのに終了の仕方がわからない
多くの場合はbinding.pryを一回だけして終了、ということはなく、続けて何度かデバッグ作業を行うかと思います。
下手にCtrl + Cで終了してしまうと、コンテナが停止してしまうので、立ち上げ直しになってしまってかなり面倒です。
解決法
pryの画面から終了するなら**continueと入力してrails server**を通常動作に戻し、docker attachを維持するのが便利です。
この状態であれば、次にbinding.pryしたときもスムーズにデバッグ作業が可能です。
※デバッグが終了してコンテナから抜けたい場合、Ctrl + P + Q(Macの場合)でコンテナを停止せずに抜けられます。
3.pryで日本語入力出来ない
少し外れますが、そもそもrails consoleでpryを使っていて、日本語が入力できないパターンもあるかもしれません。
解決法
ENV LANG C.UTF-8
Dockerfileに上記のように追記すれば解決できます。
これを忘れるとpryで日本語入力が効きません。
4.コンテナがすぐ落ちる、コンソールに文字が入力できない
2020/2/6追記
解決法
web:
tty: true
stdin_open: true
上記がdocker-compose.ymlのRailsに関係する箇所に書かれているかどうか確認します。(今回はwebとしています。)
-
tty: trueポート待受などをしていないコンテナを起動させ続けるオプション -
stdin_open: true標準入力出来るようになるオプション
おわりに
最後まで読んで頂きありがとうございました![]()
どなたかの参考になれば幸いです![]()