我有一个迁移文件db\migrate\20100905201547_create_blocks.rb。

如何具体回滚该迁移文件?


当前回答

回滚上次迁移:

# 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

其他回答

您可以使用down migration命令回退迁移,如下所示:

rake db:migrate:down VERSION=20100905201547

要回滚上次迁移,您可以执行以下操作:

rake db:rollback

如果你想用一个版本回滚一个特定的迁移,你应该做:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

例如,如果版本号是20141201122027,您将这样做

rake db:migrate:down VERSION=20141201122027

回滚特定的迁移。

要回滚所有的迁移到一个特定的版本(例如20181002222222),使用:

rake db:migrate VERSION=20181002222222

(注意,这里使用的是db:migrate,而不是其他答案中的db:migrate:down。)

假设指定的迁移版本比当前版本更老,这将回滚到指定版本之前的所有迁移,但不包括指定版本。

例如,如果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

参考:只迁移或恢复某些迁移

如果您想从上次迁移中恢复,请使用rake db:rollback命令。它对我很有效!

rake db:migrate:down VERSION=20100905201547

将回滚特定的文件。


要找到所有迁移的版本,你可以使用这个命令:

rake db:migrate:status

或者,简单地说,迁移文件名的前缀就是需要回滚的版本。


请参阅Ruby on Rails指南中关于迁移的条目。