1
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.

【Rails】devise導入後のエラーと対処:Mysql2::Error: Specified key was too long; max key length is 767 bytes

Posted at

記事の内容

devise導入時に出会ったエラーとその対応を備忘録として残します。
初投稿となりますので、至らない点等ご指摘ありましたらコメントお願いします。

環境

OS: macOS Catalina 10.15.6
Ruby: 2.6.5
Rails: 6.0.3.4
MySQL: 5.6.47

エラー発生までの流れ

Gemfile最下部にgem 'devise' を記述後、ターミナルで以下を実行。

rails g devise:install
rails g devise user
rails g devise:views

マイグレーションファイルに追加したいカラムを記述し、以下をターミナルで以下を実行。

rails db:migrate

すると以下のエラーでマイグレートできず。

Mysql2::Error: Specified key was too long; max key length is 767 bytes

原因

以下の記事にて詳しい原因を見つけました。
https://qiita.com/terufumi1122/items/9ea764618eba01144e09

デフォルトでアプリを立ち上げると文字コードはutf8mb4ですが、
アプリ立ち上げ時にutf8に修正できていなかったようです。

対処

database.ymlを以下のように修正しました。

(省略)
default: &default
  adapter: mysql2
  encoding: utf8 #utf8mb4から変更
  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:drop
rails db:create

再度rails db:migrateを実行、すると、

== 20201106033639 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0171s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0166s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0106s
== 20201106033639 DeviseCreateUsers: migrated (0.0445s) =======================

無事マイグレートできました。念の為Sequel Proでテーブルを確認したところ、追加したカラムも反映されていました。

終わりに

今回の課題は解決したものの、理解は追いついていないという印象です。
引き続き勉強していきいます。

参照記事

1
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
1
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?