次のマイグレーションファイルがある dbmigrate_20100905201547_create_blocks.rb
.
そのマイグレーションファイルを具体的にロールバックするにはどうすればよいですか?
rake db:rollback STEP=1
ロールバックしたいマイグレーションが最後に適用されたものである場合、これを実行する方法があります。戻りたいマイグレーションの数だけ1を代入することができます。
例えば
rake db:rollback STEP=5
また、その後に発生したすべてのマイグレーション(4、3、2、および1)をロールバックします。
対象となるマイグレーションを含むすべてのマイグレーションをロールバックするには、次のコマンドを使用します: (この修正コマンドは、元の投稿で誤りを指摘したすべてのコメントの後に追加されました)
rake db:migrate VERSION=20100905201547
特定の1つだけをロールバックする(順番が違う)には、次のようにします。
rake db:migrate:down VERSION=20100905201547
この場合、間にあるすべてのマイグレーションはロールバックされないことに注意してください -- リストされたものだけがロールバックされます。もしこれが意図したものでないなら、安全に rake db:migrate
を実行して、その1つだけを再実行し、それまでロールバックされていなかった他のものをスキップすることができます。
rake db:migrate:down VERSION=20100905201547
は、特定のファイルをロールバックします。
すべてのマイグレーションのバージョンを調べるには、次のコマンドを使用します。
rake db:migrate:status
または、単純にマイグレーション'のファイル名の接頭辞がロールバックする必要のあるバージョンです。
migrationsについては、Ruby on Railsガイドのエントリを参照してください。
最後のマイグレーションをロールバックするには、以下のようにします。
rake db:rollback
特定のマイグレーションをバージョンでロールバックしたい場合は、以下のようにします。
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
例えば バージョンが20141201122027であれば、あなたはそうします。
rake db:migrate:down VERSION=20141201122027
を使用して、その特定のマイグレーションをロールバックします。
マイグレーションをロールバックするには、rake db:rollback
をさまざまなオプションをつけて使用します。構文はあなたの要件に応じて異なります。
最後のマイグレーションだけをロールバックしたい場合は、次のどちらかを使用します。
rake db:rollback
または
rake db:rollback STEP=1
一度にいくつものマイグレーションをロールバックしたい場合は、単に引数を渡すだけでよい。
rake db:rollback STEP=n
ここで、n
はロールバックするマイグレーションの数で、最新のマイグレーションから数えます。
特定のマイグレーションにロールバックしたい場合は、そのマイグレーションのバージョンを以下のように渡します。
rake db:migrate:down VERSION=xxxxx
ここで、xxxxxはマイグレーションのバージョン番号です。
rake db:migrate:down VERSION=your_migrations's_version_number_here
のようになります。
バージョンは、マイグレーションのファイル名の接頭辞の数字です。
バージョンの見つけ方.
移行ファイルは rails_root/db/migrate
ディレクトリに保存されています。
ロールバックしたいファイルを探して、プレフィックス番号をコピーしてください。
例えば
ファイル名を指定します。
20140208031131_create_roles.rb
とすると、バージョンは 20140208031131
です。
前回のマイグレーションをロールバック。
# rails < 5.0
rake db:rollback
# rails >= 5.0
rake db:rollback
# or
rails db:rollback
最後の n
回の移行回数をロールバックする
# rails < 5.0
rake db:rollback STEP=2
# rails >= 5.0
rake db:rollback STEP=2
# or
rails db:rollback STEP=2
特定のマイグレーションのロールバック
# rails < 5.0
rake db:migrate:down VERSION=20100905201547
# rails >= 5.0
rake db:migrate:down VERSION=20100905201547
# or
rails db:migrate:down VERSION=20100905201547
最後のマイグレーションをロールバックするには、以下のようにします。
rake db:rollback
特定のマイグレーションをバージョンでロールバックしたい場合は、以下のようにします。
rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION
ロールバックしたいマイグレーションファイルが db/migrate/20141201122027_create_some_table.rb
という名前であれば、そのマイグレーションの VERSION は 20141201122027
であり、これはマイグレーションが作成されたタイムスタンプであり、そのマイグレーションをロールバックするコマンドは次のようになります。
rake db:migrate:down VERSION=20141201122027
Railsガイド](http://edgeguides.rubyonrails.org/active_record_migrations.html#reverting-previous-migrations)より
Active Recordの revert
メソッドを使用して移行をロールバックする機能を利用することができます。
require_relative '20100905201547_create_blocks'
class FixupCreateBlock < ActiveRecord::Migration
def change
revert CreateBlock
create_table(:apples) do |t|
t.string :variety
end
end
end
revert` メソッドは、逆にするための命令ブロックも受け付けます。 これは、以前の移行で選択した部分を元に戻すのに便利です。 例えば、CreateBlockがコミットされ、後で郵便番号の検証にCHECK制約の代わりにActive Record validationsを使用するのが最善であると判断された場合を想像してみましょう。
class DontUseConstraintForZipcodeValidationMigration < ActiveRecord::Migration
def change
revert do
# copy-pasted code from CreateBlock
reversible do |dir|
dir.up do
# add a CHECK constraint
execute <<-SQL
ALTER TABLE distributors
ADD CONSTRAINT zipchk
CHECK (char_length(zipcode) = 5);
SQL
end
dir.down do
execute <<-SQL
ALTER TABLE distributors
DROP CONSTRAINT zipchk
SQL
end
end
# The rest of the migration was ok
end
end
end
同じ移行を revert を使わずに書くこともできましたが、その場合はさらにいくつかのステップが必要になります。 create_table と reversible の順序を逆にし、create_table を drop_table に置き換え、最後に up を down に置き換えたり、その逆にしたりします。 これはすべて revert で処理されています。
特定のバージョンまでのすべての移行をロールバックするには** (例: 2018100222222222
)
(例: 2018100222222222
) を使用します。
rake db:migrate VERSION=20181002222222
(この質問に対する他の回答にあるような db:migrate:down
ではなく、db:migrate
を使うことに注意してください)。
指定されたマイグレーションのバージョンが現在のバージョンよりも古いと仮定すると、指定されたバージョンまでのすべてのマイグレーションをロールバックします。
例えば、rake db:migrate:status
が最初に表示されたとします。
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
up 20181003171932 Some migration description
up 20181004211151 Some migration description
up 20181005151403 Some migration description
ランニング。
rake db:migrate VERSION=20181002222222
結果として
(... some older migrations ...)
up 20181001002039 Some migration description
up 20181002222222 Some migration description
down 20181003171932 Some migration description
down 20181004211151 Some migration description
down 20181005151403 Some migration description
参考にしてください。 https://makandracards.com/makandra/845-migrate-or-revert-only-some-migrations
まあ、レール5では簡単です。 rake db:migrate:status 或いは rails db:migrate:status
両方を同じように扱うように修正されています そして、ロールバックしたいバージョンを選択してください。 を実行して rake db:migrate VERSION=2013424230423
VERSION がすべて大文字であることを確認してください。
移行のいずれかのステップで問題が発生したり、途中で行き詰ったりした場合は、移行ファイルに移動して、既に移行された行をコメントアウトしてください。
お役に立てれば幸いです。