対処方法(一例)
- config/database.ymlファイルの「encoding:」の設定を「utf8」に変更
rails db:migrate:reset
rails db:migrate
エラー発生までの経緯
・rails _6.0.0_ new アプリ名 -d mysql
・rails db:create
・rails db:migrate
・gem 'devise'を記述
・bundle install
・rails s
・rails g devise user
上記を実行後、マイグレーションファイルに必要なカラムを追加し、rails db:migrate
を実行したところでエラーが発生。
Mysql2::Error: Specified key was too long; max key length is 767 bytes
対処するまで
上記エラー文をそのまま検索し、こちらの記事を見て「encoding:」の設定を変更し忘れていたことに気づいた💦
参考【Mysql2】Mysql2::Error: Specified key was too long; max key length is 767 bytes→文字制限をかけるファイルを新規作成することで解決する
config/database.yml
# 〜省略〜
default: &default
adapter: mysql2
encoding: utf8 # ← utf8mb4 から utf8 に変更
pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
username: root
password:
socket: /tmp/mysql.sock
# 〜省略〜
これで一旦上記エラーは解決。しかし、再びrails db:migrate
を実行すると別のエラーが発生。
Mysql2::Error: Table 'users' already exists
こちらは既にテーブルが作成済みとのことだったので、以下のコマンドを入力。
rails db:migrate:reset
ようやくエラーが解決し、最後にrails db:migrate
を実行。
無事にdeviseの導入をすることができた。