はじめに
今回はとある事情でデバッグ用のgemであるbetter_errors
とbinding_of_caller
をアンインストールしたことから始まりました。
※初めて技術記事を書かせていただきます。内容に誤りがあった場合、コメント欄で指摘してくださると嬉しいです。
そもそもbetter_errors
とbinding_of_caller
って何???
better_errors
簡単に言うと、デバッグするのに最適なエラー画面に整形してくれるgemになります。
Rails標準のエラー画面では最低限の情報しか表示してくれません。(エラー発生時点のコード表示とRequest Parametersの内容など)
しかしbetter_errorsを導入することで、単純なエラー発生時点のコードだけでなく、エラーに関係している箇所も表示してくれます。
さらに、エラーにたどり着くまでに作成した変数(インスタンス変数含む)の値をすべて表示してくれるので、デバッグの幅をより広げてくれるgemになります。
binding_of_caller
better_errorsとセットで使用するgemになるのですが、簡単に言うとエラー画面でirb
(rubyの式をターミナルで入力・実行する)が出来るようになるgemです。
このgemを使用することで簡単なエラーであれば、エラー画面一つでデバッグが出来るようになります。
本題
まず今回better_errorsを導入するにあたって、以下の記事を参考にしていました。
もっと早く知りたかったデバッグ用gem 'better_errors','binding_of_caller'
導入した後、理由があってbetter_errors
を削除する必要がありました。なので該当の箇所をコメントアウトして、
group :development, :test do
# gem "better_errors"
# gem "binding_of_caller"
end
その後以下のコマンドを実行しました(gemを更新するため)
docker compose run web bundle install
docker compose restart
webサーバーのコンテナだけ起動しない...?
そうすると、なぜかdb(データベース)とchrome(ブラウザ操作の自動化)コンテナだけが動作する現象が起きてしまいました。
肝心のweb(Webサーバー)コンテナのみ動作しない状態になってしまったんですね。
結論
better_errors
を消去すると同時に以下のコードも消去する必要がありました。
BetterErrors::Middleware.allow_ip! "0.0.0.0/0"
このコードはdockerなどの仮想環境を使う場合、railsにbetter_errorsを許可をする設定をする必要があるそうです。(以下の記事が参考になりました)
Better_errors導入後、エラー画面が変わらない
なのでこのコードを消さなかった場合...
🐳<webコンテナ起動するよ!
🐳<ん?better_errorsのIPアドレスの指定(rubyのアクセス許可)がされているけど、better_errorsがそもそも存在しない...?
🐳<これではコンテナを立ち上げられないよ
という状況になってしまったと思います。(あくまで私の憶測なので間違っている可能性があります)
以下がコンテナを立ち上げた時に発生したエラーメッセージです。
最後に
今回私はgemを消すと同時に新しいgemを導入してしまったのが原因究明に時間が掛かってしまった要因の一つだと思っています。(git commitも同時にやってしまった)
そのせいでgemを消したのが原因なのか?gemを増やしたことが原因なのか?わからない事態になってしまいました。
機能を変更する場合は消す時と増やす場合、別々に分けてコミットと動作確認をするべきだと再認識いたしました。