スリ飯屋MaLankaのフリーエンジニアな日々

IT実務未経験から約1年、東京でフリーランスのRuby on Railsエンジニアに転職。約2年半、大阪中崎町でスリランカカレーの間借りしてました。フリーランスエンジニアになるためのノウハウ、スリランカの事を発信していきます。

【rails5】db:migrate:resetでハマったメモ

【Rails5】db:migrate:resetでハマったメモ




db:migrate:resetについて

db:migrate公式リファレンス

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状態のマイグレーションファイルを確認する方法は知れてよかった。