はじめに
Ruby on Railsで開発をしていて、MySQLのDBを修正する機会が何度もあり、その都度エラーやデータの入れ直しが発生するため、コマンドの概要ともう少し掘り下げたところまでそれぞれの意味がおさらいできればと思い、記事にしました。
ご指摘等あればよろしくお願いいたします。
入門編
①モデルファイルを作成したので、DBに反映させたい→migrate
rails g modelでモデルファイル作成後、
$ rails db:migrate
②DBを作ったが、不要になったので削除したい→drop
$ rails db:drop
③1つ前に反映したDBテーブルを修正するために、migrationを戻したい→rollback
$ rails db:rollback
入門編まとめ
・migrateを実行すると、モデルファイルに基づいてマイグレーションファイルが作られる。
・作られたマイグレーションファイルを修正し、DBに反映するためには一度rollbackを実行しDB上から該当のテーブルを下げないといけない。(この際DBに入力したデータは削除される)
初級編
①現在、どのマイグレーションファイルがDB上で有効なのか確認する→migirate:status
$ rails db:migrate:status
適用されている場合はup、適用されていない場合はdownとしてファイルがターミナル上に表示される。
②任意のファイルまでrollbackを戻したい場合→rollback STEP=[ ]
$ rails db:rollback STEP=[戻したいステップ数]
参考記事:【Rails】$rails db:rollbackしたい時の間違えない手順
③作成したDBを一旦削除して再度作成する(その1)→reset
$ rails db:reset
④作成したDBを一旦削除して再度作成する(その2)→migrate:reset
$ rails db:migrate:reset
初級編まとめ
・【resetとmigrate:resetの違い】どちらもDBを一旦dropして再度作成することは同じだが、どのファイルを元に作り直すかが異なるため、__migrate:resetではマイグレーションファイルを修正していればその内容も反映して作成されるが、migrate:resetではそうならない__ようだ。
詳しくは以下(常にmigrate:resetを使っていれば良さそうなものだが、そうもいかない時があるようだ)
[参考記事:rake db:reset と rake db:migrate:reset の違い]
(https://easyramble.com/difference-bettween-rake-db-migrate-reset.html)
参考記事:rails db:migrate:resetできなかったのでrails db:resetした
中級編
入力したDBの内容を消さずにカラムを修正したい→g migrationでカラム追加→db:migrate→カラム追加用のmigrationファイル削除
参考記事:Rails カラム名変更方法
参考記事:マイグレーションを使ったカラムの追加、削除、データ型の変更 [ 自分用メモ ]
まとめ
コマンド | 概要 | オプションその他 |
---|---|---|
migrate | DBを作成 | |
drop | DBを削除 | |
reset | drop + migrate | マイグレーションファイルの修正は反映されない |
migrate:reset | drop + migrate | マイグレーションファイルの修正も反映される |
migrate:rollback | 1つ前に反映したmigrateまで | STEP=[戻したいステップ数]で任意のmigrateまでDBを戻す |
migrate:status | 現在どこまでmigrateが反映されているか確認する |