如何使用rake db:migrate回滚仅一步


196

在文件db/migrate夹中添加迁移文件并运行后rake db:migrate,我想回到上一步,我认为使用VERSION=n是执行此操作的正确方法,但是我不知道要使用的n的正确值。是否有任何命令来检查当前的n值?

如果任何人都可以提供完整的使用说明,那将是很好的rake db:migrate

Answers:


354

对于初学者

rake db:rollback 会让你退一步

然后

rake db:rollback STEP=n

将回滚n迁移,其中n您要回滚的最近迁移的数量是。

这里有更多参考。


95

回滚最近的迁移:

rake db:rollback

回滚n最近的迁移:

rake db:rollback STEP=n

您可以在《Rails指南》中找到有关使用Rails迁移任务进行耙的完整说明,以运行迁移


还有更多:

  • rake db:migrate -运行所有尚未运行的迁移
  • rake db:migrate VERSION=20080906120000 -运行所有必需的迁移(向上或向下)以获取给定版本
  • rake db:migrate RAILS_ENV=test -在给定的环境中运行迁移
  • rake db:migrate:redo -回滚一次迁移并再次运行
  • rake db:migrate:redo STEP=n-回滚上一次n迁移并再次运行
  • rake db:migrate:up VERSION=20080906120000- up为给定的迁移运行方法
  • rake db:migrate:down VERSION=20080906120000- down为给定的迁移运行方法

并回答有关从何处获取迁移版本号的问题:

版本是迁移文件名上的数字前缀。例如,要迁移到版本20080906120000,请运行

$ rake db:migrate VERSION=20080906120000

(摘自《 Rails指南》中的“ 运行迁移 ”)


2
当rake db:rollback无法回滚最近的迁移时,我不得不使用rake db:migrate VERSION = <倒数第二个版本日期>并且运行良好
Omni

8

最佳方法是通过向下或向上(在导轨4中进行更改)再次运行特定迁移。

rails db:migrate:up VERSION =时间戳

现在如何获取时间戳。去这条路

/ db / migrate

标识要还原的迁移文件。从该文件名中选择时间戳。


尽管这不能回答问题,但这确实是最好的方法。逐步回滚可能会导致错误,尤其是在组中使用软件时。

5

如果版本是20150616132425,则使用:

rails db:migrate:down VERSION=20150616132425

1

其他人已经回答了您如何回滚,但是您还询问如何识别迁移的版本号。

  • rake db:migrate:status 提供您的迁移版本,名称和状态的列表(向上或向下)
  • 您还可以找到迁移文件,该文件的文件名中包含时间戳,即版本号。迁移位于以下文件夹中:/db/migrate

顺便说一句,如果您运行status命令,您可能会看到类似以下行:********** NO FILE **********如果使用,这些迁移在您当前的分支上不存在git。
BjarneD
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.