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


はじめに

1月〜プログラミングスクールで学習しています。
これから平日は~3/25まで毎日何かしらアウトプットのため投稿を続ける予定です。
今回は rails db:migrateコマンドを実行した際にDBに反映されなかったことについて書きます。
長くなるので2つの記事に分けます。
まずは”NO FILE”というマイグレーションファイルができてしまったことについて書きました。
※Ruby2.6.5の環境を使用し学習しています。

事象

rails db:migrateを実行すると下記のようにエラーになりました。

ターミナル
% 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:

どうやらマイグレーションの途中でエラーが出ているようです。
restコマンドなど、色々試してうまくいかないので一度エラー元と思われるusersテーブルを作り直してみましたが上記エラーは変わらず。。。
そこでrails db:migrate:statusでステータスを確認したのが下記です。
状況が悪化していますね。。。

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

database: pfc_control_development

 Status   Migration ID    Migration Name
--------------------------------------------------
   up     20220310072650  ********** NO FILE **********
   up     20220310073337  Create dietrecords
  down    20220312031130  Devise create users

まずはNO FILEを削除するところから始めます。
touchコマンドでダミーファイルを作成し、中身を記述しておきます。

  • touch db/migrate/20220310072650_hoge.rb
db/migrate/20220310072650_hoge.rb
class Hoge < ActiveRecord::Migration[6.0]
  def change
  end
end

再度ステータス確認し、NO FILEから作成したダミーファイルに変わっていることが確認できました。

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

database: pfc_control_development

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

ダミーファイルを削除したいのでまずはステータスをdownに変更します。

ターミナル
% rails db:migrate:down VERSION=20220310072650
== 20220310072650 Hoge: reverting =============================================
== 20220310072650 Hoge: reverted (0.0120s) ====================================

これでダミーファイルのステータスが変わりました。

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

database: pfc_control_development

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

rmコマンドでダミーファイルを削除します。

ターミナル
rm db/migrate/db/migrate/20190915065320_hoge.rb

これでようやく最初の状態まで戻りました。。。

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

database: pfc_control_development

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

長くなるので今日はここまでにします。
明日は最終的にどうやって解決したかを書きます。
それでは