8
11

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 5 years have passed since last update.

マイグレーションエラーの解決方法についての備忘録(devise_create_users)

Posted at

エラー発生の経過と原因

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

以上でなんとか解決した。

8
11
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
8
11

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?