Better ErrorsとBinding_of_callerとは?
Railsのgemの一つでBetter_Errors gemを使うと便利で高機能なエラー画面が表示されます。
Binding_of_callerはブラウザ上でirbを使えるようになるgemです。
Better Errorsとbinding_of_callerの導入
Gemfileに以下を記述します↓
group :development do
gem 'better_errors' #追加
gem 'binding_of_caller' #追加
end
次にdocker-compose buildでコンテナをビルドします。
$ docker-compose build
/config/environments/development.rbに以下を追加します↓
if Rails.env.development?
BetterErrors::Middleware.allow_ip! "0.0.0.0/0"
end
docker-compose up などでコンテナを起動すると↓
いつもならこのような表示が(画像は一例です)
このような表示になります!
左のペインで処理の流れがわかりやすくなります。
Application framesは自分が書いた部分が表示されます。
All framesリンクをクリックすると、gemやフレームワークのスタックトレース(バックトレース)が表示されます。
スタックトレースは下から上にメソッドが呼び出された順番が表示されます。
スタックトレースを読むことで、エラーが発生するまでにどのファイルのどの行が呼ばれてきたのかを確認できます。
右にある>>はirbの部分で、ここでコマンドすることで対話形式でデバッグの手がかりを探す事もできます。
その他デバッグに関しての心得
開発環境であれば画面にエラーの発生箇所が表示されます。
本番環境であればログを読みます。ログにもエラーの発生箇所が表示されます。
エラー画面やログを見て、エラーが起きたファイルと行番号を確認します。
実際にエラーが起きたのは自分が書いたコードではなく、gemやフレームワークのコードであることも多いようです。