はじめに
現在、Youtube apiを導入しており、そこでデバッグをするためのbinding.pry
を環境に取り入れようとして、結局debug
を取り入れた内容を備忘録として記載しておきます。
現状
これまでrailsを勉強してきて、binding.pry
も利用してきました。ですので、今回も以下の流れで進めておりました。
①Gemfileに必要なものを追加
②bundle installを実行
③binding.pryを記述して実行
しかし、うまく機能しなかったので、原因を調べて解決するまでの流れをこちらに記載したいと思います。
流れ
原因
そもそもbinding.pry
は、プログラムの実行を一時停止して、ターミナル上で対話的に操作できるデバッグツールです。なので通常の環境では、ターミナルとプロセスが直接接続されているため、簡単に機能します。
しかし、Dockerを使用している場合、作成されたコンテナ内のプロセスはローカルのターミナルから隔離されているため、機能しないとのことでした。
ですので、そちらの解決する方法を今回は紹介します。
解決
Gemの追加
- gem 'pry-rails'
+ gem 'debug' #これを追加
'debug Gem'は、Ruby公式の最新デバッガとして、標準的なデバッグツールとなりました。
特に Rails 7.0以降では、デフォルトで導入されているため、デバッグ環境のセットアップがより簡単になったそうです。
これから新しいプロジェクトを始める際は、binding.break を使って効率的にデバッグしましょう!
compose.yamlの追加
tty: true
stdin_open: true
これらのコードを追記してください。
tty
は「擬似端末」を割り当てる設定とのこと。つまり、Dockerコンテナ内のターミナル操作を有効にするための記述です。
stdin_open
は「標準入力」を開いたままにする設定です。
trueに設定することで、コンテナが実行中に標準入力を受け付けるようになります。ターミナルの-it
コマンドと同じ役割を持つ。
コンテナの起動
デタッチモードでコンテナを起動させる。
docker-compose up -d
そこから、コンテナにアタッチすることで、デバッグを活用することができます。
docker attach Webサーバーのコンテナ名(docker psで取得)
これで準備は完了です。あとは、binding.break
などを入れて必要に応じてデバッグを実行して下さい。
デバッグのコマンドなどはこちらのサイトを確認してみると、とても分かりやすいです!
さいごに
初めはbinding.pry
を導入しようと色々調べたが、docker環境だと標準的に導入されたデバッグツールを使用することで、デバッグすることができました。これからもポートフォリオ完成に向けて進めていきたいと思います。