rails db:migrateしたのにDBに反映されなかった時の話②


はじめに

1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
rails db:migrateコマンドを実行した際にDBに反映されなかったことについて書きます。
今回は解決編ということで、昨日の続きです。
※Ruby2.6.5の環境を使用し学習しています。

おさらい

rails db:migrateを実行すると下記のようにエラーになりました。
焦ってエラー元のusersテーブルを作り直してしまったため、ゴミファイル(NO FILE)ができてしまい、昨日はそれを削除した手順について書きました。

ターミナル
% rails db:migrate       
== 20220310073337 CreateDietrecords: migrating ================================
-- create_table(:dietrecords)
   -> 0.0140s
== 20220310073337 CreateDietrecords: migrated (0.0141s) =======================

== 20220312031130 DeviseCreateUsers: migrating ================================
-- create_table(:users)
rails aborted!
StandardError: An error has occurred, all later migrations canceled:

現在の状況はこちらです。
下記をなんとかしないといけないようです。
down 20220312031130 Devise create users

ターミナル
% rails db:migrate:status                           

database: pfc_control_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220310073337  Create dietrecords
  down    20220312031130  Devise create users

解決

色々調べた結果、usersテーブルが既に存在しているため、マイグレートが実行できないみたいなので、
既に存在するusersテーブルを削除し、再度マイグレートする必要がありそうです。
まずはターミナルからコマンドラインでDBに接続します。
rails db

ターミナル
% rails db
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 182
Server version: 5.6.51 Homebrew

Copyright (c) 2000, 2021, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

次にshow tables;コマンドで現在のテーブル一覧を確認します。
show tables;

ターミナル
mysql> show tables;
+-----------------------------------+
| Tables_in_pfc_control_development |
+-----------------------------------+
| ar_internal_metadata              |
| dietrecords                       |
| schema_migrations                 |
| users                             |
+-----------------------------------+
4 rows in set (0.00 sec)

今回マイグレートがうまくいかない原因となっているのはusersテーブルなのでこれを削除します。
drop table 削除対象テーブル名;

ターミナル
mysql> drop table users;
Query OK, 0 rows affected (0.02 sec)

mysql> 

再度テーブル一覧を確認し、usersテーブルが削除できているのでexitで抜けます。

mysql> show tables;
+-----------------------------------+
| Tables_in_pfc_control_development |
+-----------------------------------+
| ar_internal_metadata              |
| dietrecords                       |
| schema_migrations                 |
| users                             |
+-----------------------------------+
4 rows in set (0.00 sec)

mysql> 
mysql> exit

この状態で再度マイグレートすると無事成功しました(泣)
rails db:migrate

% rails db:migrate                          
== 20220312031130 DeviseCreateUsers: migrating ================================
-- create_table(:users)
   -> 0.0156s
-- add_index(:users, :email, {:unique=>true})
   -> 0.0399s
-- add_index(:users, :reset_password_token, {:unique=>true})
   -> 0.0180s
== 20220312031130 DeviseCreateUsers: migrated (0.0737s) =======================

エラーが出た時は焦ってごちゃごちゃやってしまうと余計に事態が悪化する典型例でしたね。。。
反省して次に生かしたいと思います
それでは~