エラー発生の経過と原因
deviseを使用してuserモデルを作成し、usersテーブルを作成しようとマイグラーションファイルを実行した。しかし、以下のようなエラーが発生してしまった。
okamotoryounoMacBook-Air:chat-space2 okamotoryou$ rake db:migrate
== 20190620191810 DeviseCreateUsers: migrating ================================
-- create_table(:users)
rake aborted!
StandardError: An error has occurred, all later migrations canceled:
Index name 'index_users_on_name' on table 'users' already exists
/Users/okamotoryou/projects/chat-space2/db/migrate/20190620191810_devise_create_users.rb:5:in `change'
Caused by:
ArgumentError: Index name 'index_users_on_name' on table 'users' already exists
/Users/okamotoryou/projects/chat-space2/db/migrate/20190620191810_devise_create_users.rb:5:in `change'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)
エラーの原因は、「すでにusersテーブルのマイグレーションファイルは実行されているから、再度同じマイグレーションファイルを実行することはできない」というものであった。
そこで、以下のコマンドで、マイグラーションファイルの実行状況を確認した。
$ rails db:migrate:status
すると、以下のような実行状況になっていた。
okamotoryounoMacBook-Air:chat-space2 okamotoryou$ rake db:migrate:status
database: chat-space2_development
Status Migration ID Migration Name
--------------------------------------------------
up 20190618115638 ********** NO FILE **********
up 20190620183857 Create groups
up 20190620183912 Create group users
down 20190620191810 Devise create users
解決方法と手順
この時の解決方法と手順としては、
1.4つ目のdownになっている20190620191810 Devise create usersというマイグレーションファイルのファイル名をコピーする。
2.メモ帳などにそれをペースとして記録する。
3.1つ目のupになっている**20190618115638 ********** NO FILE **********
という部分のファイルを復活させるため、エディタ上のmigrateのディレクトリにおいて、新しい空のファイルを作成する。
4.そのファイルに先ほどメモした20190620191810 Devise create usersというマイグレーションファイルのファイル名を新しく作成したファイル名とする。
5.4つ目のdownになっている20190620191810 Devise create usersというマイグレーションファイルのファイル中のコードをコピーする。
6.新しく作成した20190620191810 Devise create usersというマイグレーションファイルの中にペーストする。
7.4つ目のdownになっている20190620191810 Devise create usersというマイグレーションファイルのファイルを削除する。
8.最後にrake db:migrate:statusコマンドで確認する。
okamotoryounoMacBook-Air:chat-space2 okamotoryou$ rake db:migrate:status
database: chat-space2_development
Status Migration ID Migration Name
--------------------------------------------------
up 20190618115638 Devise create users
up 20190620183857 Create groups
up 20190620183912 Create group users
以上でなんとか解決した。