0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Rails マイグレーション関係のコマンド

Posted at

Railsマイグレーション取り消しメモ(Docker環境Ver)

いつも覚えているけどなんとなく覚えていなくて
「あれ?このコマンドなんだっけ?」となるので、
自分用ナレッジとして残しておきます。

Docker環境(backend コンテナ)を前提にしています。
適宜 backend は環境に合わせて読み替えてください。

マイグレーションファイルの状態確認

docker compose exec backend rails db:migrate:status

出力例:

database: db/development.sqlite3

Status Migration ID Migration Name

up 20251006021745 create_system_masta
up 20251003035213 create_customer_ranks
up 20251001102518 create_customers

Migration ID を控えておきます(例:20251006021745)。

対象マイグレーションを取り消す

docker compose exec backend rails db:migrate:down VERSION=20251006021745

VERSION= の後ろは上で確認したマイグレーションIDを指定。

成功例:

== 20251006021745 CreateSystemMasta: reverting ===========================
-- drop_table(:system_masta)
   -> 0.0034s
== 20251006021745 CreateSystemMasta: reverted (0.0042s) ==================

不要なマイグレーションファイルを削除

rm backend/db/migrate/20251006021745_create_system_masta.rb

schema.rb の整合性確認(念のため)

cat backend/db/schema.rb | grep system_masta

何も出力されなければOKです。

ログ履歴をクリーンにしたい場合(開発環境専用)

docker compose exec backend rails db:migrate:reset

注意:DBが再構築されるため、既存データは全て削除されます。
本番環境では絶対に実行しないこと。

強制的に直前のマイグレーションを取り消す

もし VERSION の指定が分からない場合は、
直近の1件を巻き戻すことも可能です。

docker compose exec backend rails db:rollback STEP=1
操作内容 コマンド
状態確認 docker compose exec backend rails db:migrate:status
指定マイグレーション取り消し docker compose exec backend rails db:migrate:down VERSION=xxxx
ファイル削除 rm backend/db/migrate/..._create_xxx.rb
スキーマ確認 `cat backend/db/schema.rb
強制巻き戻し(1件) docker compose exec backend rails db:rollback STEP=1
DBリセット(開発専用) docker compose exec backend rails db:migrate:reset

追加でよく使う関連コマンド

新しいマイグレーションを作成

docker compose exec backend rails g migration add_column_to_users

モデルとマイグレーションを同時に生成

docker compose exec backend rails g model Product name:string price:integer

すべてのマイグレーションを最新に適用

docker compose exec backend rails db:migrate

スキーマを再読み込み

docker compose exec backend rails db:schema:load

備考

migrate:down は(逆操作が定義済み)でのみ動作します。

定義されていない場合は rails db:rollback STEP=1 を使うのが安全です。

Docker環境ではコンテナ名を必ず付与(例:backend)するのを忘れずに。

実用ポイント

Qiitaや個人ノートに貼るときは「backend」の部分を変数化しておくと再利用しやすいです。

例:
APP=backend
docker compose exec $APP rails db:migrate:status
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?