为什么我要恢复迁移?

Sté*_*hen 5 migration ruby-on-rails

在Rails中,down默认情况下,迁移具有恢复迁移的方法.但是,在什么情况下我还想恢复迁移?

一些想法:

无论是在开发还是生产中,在我运行迁移之前,我总是会有一个我的数据库快照.特别是对于执行数据转换的迁移,我发现在大多数情况下恢复快照甚至比恢复迁移更快.(所以我绝不会急于做!)

如果迁移失败,它将:

  • 在非事务性数据库上发生异常失败,从而使数据库损坏,或者
  • 失败并发生异常并回滚事务,因此不需要以其他方式还原.

如果所做的更改是在生产中(或在开发的后期),后来证明是一个错误,我会在新的迁移中修复我的错误.我不会还原旧的.在开发中,我只是删除迁移.

我还发现down方法引入了额外的代码,我重复自己,因此可能会引入新的bug.这违反了DRY原则.

所以我对职业选手很好奇,因为我想不到任何优点.

Lar*_*y K 4

在开发中,通过自动使用 down 方法可以轻松快速地逐步“改进”迁移。例如

  1. 创建迁移并迁移到它
  2. 意识到你需要做出改变
  3. 使用 db:migrate 和版本迁移到新迁移之前的版本
  4. 改进/修复您的迁移
  5. 重新运行迁移任务

您拍摄快照的方法效果很好。但是 Rails 使用“向下”迁移技术自动神奇地包含了相同的效果。适用于所有数据库,味道很棒

添加:

对于生产,我同意不需要向下迁移。但有时会发生错误,您需要回滚。向下迁移路径为您提供了在升级过程中出现紧急情况时第一个快速修复问题的机会。

-- 在紧急情况下尝试向下迁移比使用检查点恢复数据库要快得多。