mysql中输错了怎么往回移_mysql - 回滚失败的Rails迁移

如何回滚失败的rails迁移? 我希望rake db:rollback可以撤消失败的迁移,但不会,它会回滚先前的迁移(失败的迁移减去1)。 并且rake db:migrate:down VERSION=myfailedmigration也不起作用。 我已经碰到了几次,这非常令人沮丧。 这是我为复制问题所做的简单测试:

class SimpleTest < ActiveRecord::Migration

def self.up

add_column :assets, :test, :integer

# the following syntax error will cause the migration to fail

add_column :asset, :test2, :integer

end

def self.down

remove_column :assets, :test

remove_column :assets, :test2

end

end

结果:

== SimpleTest: migrating =====================================================

-- add_column(:assets, :test, :integer)

-> 0.0932s

-- add_column(:asset, :error)

rake aborted!

An error has occurred, all later migrations canceled:

wrong number of arguments (2 for 3)

好吧,让我们回滚:

$ rake db:rollback

== AddLevelsToRoles: reverting ===============================================

-- remove_column(:roles, :level)

-> 0.0778s

== AddLevelsToRoles: reverted (0.0779s) ======================================

是吧? 这是我在SimpleTest之前的最后一次迁移,而不是失败的迁移。 (哦,如果迁移输出包含版本号,那将会很好。)

因此,让我们尝试运行失败的迁移SimpleTest:

$ rake db:migrate:down VERSION=20090326173033

$

没有任何事情发生,也没有输出。 但也许它还是进行了迁移? 因此,我们修复SimpleTest迁移中的语法错误,并尝试再次运行它。

$ rake db:migrate:up VERSION=20090326173033

== SimpleTest: migrating =====================================================

-- add_column(:assets, :test, :integer)

rake aborted!

Mysql::Error: Duplicate column name 'test': ALTER TABLE `assets` ADD `test` int(11)

不。 显然迁移:down不起作用。 它并没有失败,它只是没有执行。

除了手动进入数据库并删除它,然后运行测试之外,没有办法摆脱那个重复的表。 必须有一个比这更好的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值