【Rails5】db:migrate:resetでハマったメモ
db:migrate:resetについて
DBのテストユーザーが増えてごちゃっとしていたので、db:migrate:resetしてデータを入れなおそうとすると、夜中中ハマってしまった。
その時に知ったことをメモ。
db:migrate:resetは、dbを全て削除し、もう一度migrateを実行するコマンド。
resetすると、db:seedで作成していたユーザーも削除される。
テーブルにカラム追加(Add~テーブル部分はパスカルケース、頭文字だけ大文字で入力)
$ rails g migration AddColumnToテーブル名 カラム名:データ型
テーブルからカラム削除(Remove~テーブル部分はパスカルケース、頭文字だけ大文字で入力)
$ rails g migration RemoveColumnFromテーブル名 カラム名:データ型
上記でカラム名を追加したり削除して、混乱してきたら
$ git reset --hard 直前のコミット名
で、マイグレーションファイルやカラムは直前のコミットの状態に戻せる。
こまめなコミットは大事だと改めて痛感した。
- db:migrateやdb:seedを実行するときは、pending状態(migrateが未完了)のファイルが無いかどうか先に確認すること。
pending状態のマイグレーションファイルが無いかどうか確認するコマンド
$ rails db:abort_if_pending_migrations
- マイグレーションファイル名は、テーブルの名前にしないとエラーになる。
何回かに分けてカラムを足したり消したりしていて、マイグレーションファイル名が重複したので、ファイル名の語尾に追加して分けてみたがダメ。multiple deplicateというようなエラーが出る。
〇 Add_Column_To_Users ✖ Add_Column_To_Users_name
この場合、Add_Column_To_Usersにまとめて記述してから、db:migrateすると上手くいった。
色んな問題が重なって迷宮入りしましたが勉強になった。
特に、pending状態のマイグレーションファイルを確認する方法は知れてよかった。