気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

【Rails】特定のマイグレーションファイルのみを実行する

こんにちは。

寒さにより、日に日に朝起きられなくなってきていますが、そんな時におすすめな行動は、起きた瞬間(トイレにも行かず)に外直行。秒で目覚めます。

どうもハチマキです。

はじめに

rails db:migrateする際に、いくつかStatusがdownにあり、特定ファイルのみ実行したいのに実行できない状態になりました。(他のdown状態のファイルがmigrateされる)
今回は特定ファイルのみをmigrateする方法に関して、書いていきたいと思います。

では早速行きましょう!

本日の概要 : 特定のマイグレーションファイルのみを実行する

エラー例

新たにカラム追加をしたく、rails db:migrateを実行した際に、他のファイルも同時に実行されてしまう
※今回追加したいカラム → add_column(:post, :text, :string)

$ bundle exec rails db:migrate
・・・・・・
===ここから
==  AddColumnsForWearConfortable: migrating ===================================
-- add_column(:user, :age :integer)
   -> 4.0391s
-- add_column(:user, :birthday :date)
   -> 2.2989s
===ここまでが不要

==  AddPurchaseLocationToContacts: migrating ==================================
-- add_column(:post, :comment, :text)
   -> 0.0357s
・
・
・

原因

migrate未実行のファイルが読み込まれている

解決方法

実行することは、2つ!
1. migrate未実行ファイルを確認する

$ bundle exec rails db:migrate:status

database: omgspreedevelopment

 Status   Migration ID    Migration Name
--------------------------------------------------
down      201202--------  〇〇
 up     201202100------  〇〇
 up     201202100------- 〇〇
down    20201------------ 〇〇

上記コマンドを実行すると、現在のmigrateのstatusを確認できます。

2. Migration IDを指定してコマンドを実行する
反映させたいMigration IDを指定することで、指定した特定ファイルのみが実行されます。
※statusがupになっているファイルはすでにmigrate済みです

$ bundle exec rails db:migrate:up VERSION=20201------------

これで完了です!