記事の内容
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でテーブルを確認したところ、追加したカラムも反映されていました。
終わりに
今回の課題は解決したものの、理解は追いついていないという印象です。
引き続き勉強していきいます。
参照記事