はじめに
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
標準入力出来るようになるオプション
おわりに
最後まで読んで頂きありがとうございました
どなたかの参考になれば幸いです