RailsをベースにWebページを作成にあたり、モデルを作っていたところ、一部記載を失念してしまい、そのままマイグレーションしてしまいました。。。
そこで、マイグレーションファイルを修正する方法を改めて確認したので、備忘録的に以下に記載します!
前提条件
今回の説明にあたり、前提条件としてmigrationフォルダ状況を以下を例とします。
migrate
├─ 20200111042708_devise_create_users.rb
├─ 20200111045059_add_nickname_to_users.rb
├─ 20200111055028_create_addresses.rb
絶対にやっては行けないこと-マイグレーションファイルの削除-
マイグレーションファイルは絶対に削除しないようにしましょう。実行完了後のマイグレーションファイルを削除してしまうと、schema_migrationsと齟齬が生じ問題が生じる恐れがあります。
*schema_migrations:
データベースの変更履歴のようなもので、どのマイグレーションファイルまでが実行されているかが記録されていくテーブル。マイグレーションファイルが実行された際に自動的に作成されます。
rails db:rollback
rails db:rollback:
このコマンドを実行すると、データベースの状態が最新のmigrationファイルを実行する前に戻ります。
rails db:rollbackの手順
1.現状確認
まずはどこまでmigrateが実行されているか確認します。
$ rails db:version
Current version: 20200111055028
#migrateファイルの”20200111055028”までマイグレーションしていることを示してます。
今回の例をベースにすると一番下(最新)です。
migrate
├─ 20200111042708_devise_create_users.rb
├─ 20200111045059_add_nickname_to_users.rb
├─ 20200111055028_create_addresses.rb
2.rails db:rollback実行
#最新から一つ前まで戻す
$ rails db:rollback
この対応をしているとマイグレーションファイルが大量にあるときに詰みます。。。
そのようなときに、任意のファイルまで戻すやり方は以下となります。
#任意のファイルまで戻す(ステップ数指定)
#数字の部分で指定し、現在地を含めた箇所まで戻します。
#例えばステップ数に2を指定すれば2つ前の状態に戻ります。
$ rails db:rollback STEP=2
#任意のファイルまで戻す(ver指定)
#verを入力してそこまで戻します。
rake db:migrate VERSION=20200111042708
上記がrails db:rollbackによる、マイグレーションファイルの修正となります!
rails db:migrate:reset
rails db:migrate:reset:
このコマンドを実行すると、全てのマイグレーションファイルをリセットして、一から全てマイグレーションします。
*DBのデータが全てリセットされることをご注意ください。
rails db:migrate:resetの手順
rails db:migrate:resetを実行しましょう。以上です。
非常に簡単ですので、開発中でDBに特に重要なデータがない場合は、こちらがおすすめかと思われます。
$rails db:migrate:reset
rails db:reset と rails db:migrate:reset の違い
似たコマンドでrails db:resetというコマンドがありますが、。
結論
db:resetは、db/schema.rbを元にDB作成し、db:seedまで実行される。
db:migrate:resetは、DBを削除した後に、db/migrate/**.rb を古い順から実行するが、db:seedは実行されない。
コマンド | db:reset | db:migrate:reset |
db:drop | ✔️ | ✔️ |
db:create | ✔️ | ✔️ |
db:migrate | ✔️ | |
db:schema:load | ✔️ | |
db:seed | ✔️ |
*db:seed:
DBに設置する初期データを投入するためのコマンドです。
db/seeds.rbファイルに記入します。
*schema_migrations:
データベースの変更履歴のようなもので、どのマイグレーションファイルまでが実行されているかが記録されていくテーブル。マイグレーションファイルが実行された際に自動的に作成されます。
メモ(マイグレーションファイルに記載する型の種類)
型 | 説明 | 用例 |
integer | 数字 | ユーザーのidなど |
string | 文字(少なめ) | ユーザー名、パスワードなど |
text | 文字(多め) | 投稿文など |
boolean | 真か偽か | 真偽フラグ |
datetime | 日付と時刻 | 作成日時、更新日時など |
以上となります。最後までご覧いただき、ありがとうございました!
今後も学習した事項に関してQiitaに投稿していきますので、よろしくお願いします!
記述に何か誤りなどございましたら、お手数ですが、ご連絡いただけますと幸いです。
参照
マイグレーションのロールバック
https://www.javadrive.jp/rails/model/index8.html
rails db:migrate:resetできなかったのでrails db:resetした
https://qiita.com/mom0tomo/items/a252ff8a42eea00f81b1
【Rails】db:reset と db:migrate:reset の違い
https://blog.naichilab.com/entry/db_reset-vs-db_migrate_reset
rake db:seedを使った初期データの投入
https://www.javadrive.jp/rails/model/index10.html