0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【devise】Mysql2::Error: Specified key was too long; max key length is 767 bytesを解決した一例

Last updated at Posted at 2021-02-15

対処方法(一例)

  1. config/database.ymlファイルの「encoding:」の設定を「utf8」に変更
  2. rails db:migrate:reset
  3. 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の導入をすることができた。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?