自分用にエラーが出たときの対応の仕方をメモしておく。
1:エラーをGemで見やすくする
Better_errorsの使い方(Docker)からBetter Errorsを導入
2:どこでエラーが起きたか調べる
エラーログの左側を見てどこでエラーが起きたか調べてみる
Application Frames: 自分が書いたコード
All Frames: ライブラリなど全部あわせたもの
例
またはdocker-compose up などでエラーログを見る
例
web_1 | Started GET "/its/27%2F28%2F29/edit" for 172.19.0.1 at 2020-09-09 06:53:43 +0000
web_1 | Cannot render console from 172.19.0.1! Allowed networks: 172.18.0.1, 127.0.0.0/127.255.255.255, ::1
web_1 | (2.0ms) SET NAMES utf8, @@SESSION.sql_mode = CONCAT(CONCAT(@@sql_mode, ',STRICT_ALL_TABLES'), ',NO_AUTO_VALUE_ON_ZERO'), @@SESSION.sql_auto_is_null = 0, @@SESSION.wait_timeout = 2147483
web_1 | (0.5ms) SELECT `schema_migrations`.`version` FROM `schema_migrations` ORDER BY `schema_migrations`.`version` ASC
web_1 | Processing by ItsController#edit as HTML
web_1 | Parameters: {"id"=>"27/28/29"}
web_1 | It Load (0.7ms) SELECT `its`.* FROM `its` WHERE `its`.`id` = 27 ORDER BY `its`.`created_at` DESC LIMIT 1
web_1 | CACHE It Load (0.0ms) SELECT `its`.* FROM `its` WHERE `its`.`id` = 27 ORDER BY `its`.`created_at` DESC LIMIT 1
web_1 | Rendering its/edit.html.erb within layouts/application
web_1 | Rendered its/_form.html.erb (35.9ms)
web_1 | Rendered its/edit.html.erb within layouts/application (74.7ms)
web_1 | Completed 500 Internal Server Error in 275ms (ActiveRecord: 2.7ms)
web_1 | ActionView::Template::Error - undefined method `collection' for #<It:0x000055718cd5d1f0>:
web_1 | app/views/its/_form.html.erb:2:in `view template'
web_1 | app/views/its/edit.html.erb:3:in `_app_views_its_edit_html_erb__1765342506097455731_70330460854860'
web_1 |
web_1 | Started POST "/__better_errors/dfe6a931fb2ec233/variables" for 172.19.0.1 at 2020-09-09 06:53:44 +0000
web_1 | Cannot render console from 172.19.0.1! Allowed networks: 172.18.0.1, 127.0.0.0/127.255.255.255, ::1
3:エラーメッセージを見る
undefined method `collection’ for #<It:0x000055718cd5d1f0>
日本語に訳して意味を調べる↓
未定義のメソッド `collection’ for #<It:0x000055718cd5d1f0
未定義のメソッド `collection’ for #<It:0x000055718cd5d1f0
エラーのタイプも見る
ActionView::Template::Error
ActionView::Template::Errorを検索して公式のAPIドキュメントを見る
これもまた日本語に訳して意味を調べる。
それでもわからないときはエラーログを見る。
4:pry-byebugを使う
pry-byebugの使い方から導入する。
docker-compose up -dでコンテナを起動する
docker-compose up -d
docker psでNAMESを確認
docker ps
docker attach lifehack_web_1
bindig.pryを挿入して
showアクションが行われるページにアクセスするかリロードする。
このような画面になっていれば成功している。
変数やメソッドの戻り値などを調べる
helpでコマンドなども見ることができる