如何回滚特定的迁移?

我有以下迁移文件db\\migrate\\20100905201547_create_blocks.rb

如何专门回滚该迁移文件?


#1楼

您可以使用具有不同选项的rake db:rollback来回滚迁移。 语法将根据您的要求而有所不同。

如果要仅回滚上次迁移,则可以使用其中一个

rake db:rollback

要么

rake db:rollback STEP=1

如果您想一次回滚迁移次数,那么您只需传递一个参数:

rake db:rollback STEP=n

其中n是要回滚的迁移数,从最新迁移开始计算。

如果要回滚到特定迁移,则应在以下内容中传递迁移版本:

rake db:migrate:down VERSION=xxxxx

其中xxxxx是迁移的版本号。


#2楼

rake db:migrate:down VERSION=your_migrations's_version_number_here

版本是迁移文件名的数字前缀

如何找到版本

您的迁移文件存储在rails_root/db/migrate目录中。 找到要回滚的相应文件并复制前缀编号。

例如

文件名: 20140208031131_create_roles.rb那么该版本是20140208031131


#3楼

如果它是可逆迁移并且最后一个已执行,则运行rake db:rollback 。 而且你总是可以使用版本。 例如

迁移文件是20140716084539_create_customer_stats.rb,因此rollback命令将是, rake db:migrate:down VERSION=20140716084539


#4楼

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

rake db:rollback

如果要使用版本回滚特定迁移,则应执行以下操作:

rake db:migrate:down VERSION=YOUR_MIGRATION_VERSION

例如,如果版本是20141201122027,您将执行以下操作:

rake db:migrate:down VERSION=20141201122027

回滚特定的迁移。


#5楼

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

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

#6楼

如果要回滚和迁移,可以运行:

rake db:migrate:redo

这与以下相同:

rake db:rollback
rake db:migrate

#7楼

来自Rails指南

恢复以前的迁移

您可以使用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已提交,后来决定最好使用Active Record验证代替CHECK约束来验证zipcode。

    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的顺序和可逆,用drop_table替换create_table,最后用down替换,反之亦然。 这都是通过还原来处理的。


#8楼

rake db:rollback STEP=1

如果要回滚的迁移是应用的最后一个迁移,则可以这样做。 您可以将1替换为您想要返回的许多迁移。

例如:

rake db:rollback STEP=5

还将回滚稍后发生的所有迁移(4,3,2和1)。

要将所有迁移回滚到(并包括)目标迁移,请使用:(在所有注释指出原始帖子中的错误之后添加了此更正的命令)

rake db:migrate VERSION=20100905201547

为了仅回滚一个特定的迁移(OUT OF ORDER),请使用:

rake db:migrate:down VERSION=20100905201547

请注意,这不会回滚任何中间迁移 - 仅列出所迁移的迁移。 如果这不是你想要的,你可以安全地运行rake db:migrate ,它将只重新运行那个,跳过之前没有回滚过的任何其他的。


#9楼

迁移使用该命令更改数据库的状态

$ bundle exec rake db:migrate

我们可以使用撤消单个迁移步骤

  $ bundle exec rake db:rollback

要一直回到开头,我们可以使用

  $ bundle exec rake db:migrate VERSION=0

正如您可能猜到的那样,将任何其他数字替换为0会迁移到该版本号,其中版本号来自按顺序列出迁移


#10楼

在rails 5中,rake db:migrate:status或rails db:migrate:status非常简单

它被修改为以相同的方式处理然后只选择要回滚的版本,然后运行rake db:migrate VERSION = 2013424230423

确保VERSION全是大写字母

如果您在迁移的任何步骤中遇到问题或卡在中间,只需转到迁移文件并注释掉已迁移的行。

希望有所帮助


#11楼

回滚上次迁移:

# 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

#12楼

要将所有迁移回滚到特定版本 (例如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

参考: https//makandracards.com/makandra/845-migrate-or-revert-only-some-migrations


#13楼

rake db:migrate:down VERSION=20100905201547

将回滚特定文件。


要查找所有迁移的版本,可以使用以下命令:

rake db:migrate:status

或者,只是迁移文件名的前缀是您需要回滚的版本。


请参阅有关迁移的Ruby on Rails指南条目

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值