発生したエラー
devise導入の流れの中で、マイグレーションファイルを修正し、いざrails db:migrateを実行すると、下記のエラーが発生。
Mysql2::Error: Specified key was too long; max key length is 767 bytes
調べたところ、database.yml の、 encoding: utf8mb4を encoding: utf8へ修正する必要がある。
(utf8mb4だと、1文字あたり4bytes使い、文字数制限をoverしてしまうそうだ)
そのため、encoding: utf8へ修正し、再度rails db:migrateを実行すると、タイトルのエラー(下記)が発生。
Mysql2::Error: Table 'users' already exists
調べた内容と仮説
エラーを和訳すると、usersテーブルが既に存在するということ。
今回、rails db:migrateを実行しようとした結果、表示されたエラーであるため、恐らくすでにmigrateされている
(=ststusがupの状態)ということのはず。
つまり、rollbackし、usersテーブルを一度削除し、再度作成すれば解決する、という仮説が建てられる。
仮説に基づいた実行結果
rails db:rollback
rails d devise user
rails g devise user
マイグレーションファイルを修正
rails db:migrate
→再度タイトルのエラー(Mysql2::Error: Table 'users' already exists)
意味がわからない。。
結論
結果として、rails db:resetで解決されました。
この理由としては、schema.rbの存在でした。
このファイルは、migrateファイルの生成順序などを管理しています。
そして、このファイルをリセットしなければ、例えテーブルを削除したところで、upの状態になっているそうです。
なので、一度テーブルを削除しても、エラーが維持されるようであれば、resetを頭に入れるべき。
注意点としては、別のテーブルもリセットされてしまうこと。慎重にならなければならない。