この記事を読むとわかること
- マイグレーションファイルを削除する方法
- NO FILE を削除する方法
初学者ですが、自分が躓いた箇所を基礎からなるべく分かりやすく書いたつもりなので
参考にしていただけると幸いです。
また間違っているところがあればご教授お願いします。
【STEP0】 migrationの現状把握
まず、migrationの状況確認しましょう
わかる方は読み飛ばしてくださいー
確認コマンドは↓↓↓
rails db:migrate:status
ターミナルへ入れると下のように確認ができます。
ec2-user:~/environment/sample (main) $ rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20211219053729 Devise create users
up 20211219065745 Devise create admins
up 20211219070933 Create apps
up 20211219071038 Create logs
up 20211225103252 Create active storage tablesactive storage
up 20220126105427 Hoge
左列のstatusがupになっているとmigtrationの内容が更新されない状態です。
次の解説でstatusをdownしてから、いらないmigrationを消し去りましょう!
1. マイグレーションファイルを削除する方法
手順まとめ
1.migrationをdownにする
$ rails db:migrate:down VERSION=マイグレーションID
2.migrationファイルを削除する
$ rm db/migrate/マイグレーションID_hoge.rb
【解説】
【1-1】migrationをdownにする
statusで確認した"Migration ID"を以下コマンドに当てはめます
rails db:migrate:down VERSION=Migration ID
実際に動かしてみると
ec2-user:~/environment/sample (main) $ rails db:migrate:down VERSION=20220126105427
== 20220126105427 Hoge: reverting =============================================
== 20220126105427 Hoge: reverted (0.0027s) ====================================
再度rails db:migrate:status
で確認するとdownになっているはずです!
【1-2】migrationを削除
downにできたのでこれでファイルの削除ができるようになりました!
あとは下のコマンドで瞬☆殺です! ^^
(コマンドではmodelの頭文字は小文字でOKです)
rm db/migrate/20220126105427_hoge.rb
2. NO FILE を削除する方法
手順まとめ
1. NO FILEを名前をつけて復活させる
$ touch db/migrate/マイグレーションID_hoge.rb
2. migrationファイルに内容記載
3.記載した内容を反映させる
$ rails db:migrate
4.migrationをdownにする
$ rails db:migrate:down VERSION=マイグレーションID
5.migrationファイルを削除する
$ rm db/migrate/マイグレーションID_hoge.rb
【解説】
【2-1】 NO FILEを名前をつけて復活させる
modelを先に消してしまった場合、
statusを確認すると、********** NO FILE **********
となっています。
ec2-user:~/environment/sample (main) $ rails db:migrate:status
Status Migration ID Migration Name
--------------------------------------------------
up 20211219053729 Devise create users
up 20211219065745 Devise create admins
up 20211219070933 Create apps
up 20211219071038 Create logs
up 20211225103252 Create active storage tablesactive storage
up 20220126105427 ********** NO FILE **********
この状態ではそもそもファイルがなく、ファイルの削除ができません。
ファイルが無いのであれば、削除のためにファイルを作っちゃいましょう☆
NO FILEのIDをtouchコマンドを使って以下のように打ち込みます。
touch db/migrate/20220126105427_hoge.rb
【2-2】 migrationファイルに内容記載
後は消すだけ!と思ったら
作成されたファイルに中身を書かないと、認識してくれないようなので"中身をかけ"と怒られます。
(5.2の数字は他のmigrationファイルと合わせた数字を書きます)
class CreateHoges < ActiveRecord::Migration[5.2]
def change
end
end
中身を書いたのでrails db:migrate
を忘れずに、、、
ここまでくれば、前半と同じで
migrationをdownにする
$ rails db:migrate:down VERSION=マイグレーションID
migrationファイルを削除する
$ rm db/migrate/マイグレーションID_hoge.rb
で、完了です!!!
以上、ご覧いただきありがとうございました!