LoginSignup
6
4

More than 3 years have passed since last update.

rails db:migrateをするとエラーが発生(rails aborted!StandardError: An error has occurred)

Last updated at Posted at 2020-03-11

発生したエラー内容

データベースにカラムを追加しようとすると次のメッセージが表示され処理が中断された。
「duplicate column name」とあるのでカラムが重複しているらしい。

$ rails db:migrate
== 20200311131021 AddRememberDigestToUsers: migrating =========================
-- add_column(:users, :remember_digest, :string)
rails aborted!
StandardError: An error has occurred, this and all later migrations canceled:

SQLite3::SQLException: duplicate column name: remember_digest
#中略
bin/rails:4:in `<main>'
Tasks: TOP => db:migrate
(See full trace by running task with --trace)

原因の確認

1. /db/migrateでマイグレーションファイルの確認

重複した記述は見られず。

2. データベースの確認

$ rails db
sqlite> .schema Users
CREATE TABLE IF NOT EXISTS "users" ("id" integer PRIMARY KEY AUTOINCREMENT NOT NULL, "name" varchar, "email" varchar, "created_at" datetime(6) NOT NULL, "updated_at" datetime(6) NOT NULL, "password_digest" varchar, "remember_digest" varchar);

作成しようとした「remember_digest」カラムがすでに存在した。...なぜ?

3. マイグレーションの実行状況を確認

$ rails db:migrate:status

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200229035424  Create users
   up     20200229052320  Add index to users email
   up     20200229053658  Add password digest to users
   up     20200307032712  ********** NO FILE **********
  down    20200311131021  Add remember digest to users

NO FILEがある...

ここでやっと気づきました。
一度git resetをしていたのでマイグレーションファイルは削除されたがデータベースには手を加えていないのでそのままになっていたようです。

解決方法

正しい方法かはわからないですが以下の手順で解決しました。
データベースに登録されているデータは全て消えるので注意が必要です。

$ rails db:reset # データベースの再作成

$ rails db:migrate:status # マイグレーションファイルの確認

database: db/development.sqlite3

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20200229035424  Create users
   up     20200229052320  Add index to users email
   up     20200229053658  Add password digest to users
  down    20200311131021  Add remember digest to users

$ rails db:migrate # まだ適用されていなかったマイグレーションファイルの適用
6
4
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
6
4