【问题标题】:def change migration rollbackdef 更改迁移回滚
【发布时间】:2014-05-09 18:23:17
【问题描述】:

我是 Rails 新手,最近一直在玩迁移以了解这个概念。有时,我使用相当新的 change 方法进行迁移,但也使用 up 和 down 方法,并且调用 db:rollback 不起作用。因此,我不得不抑制这些迁移,并重置我的数据库。

然而,我在想:有没有办法“测试”迁移以了解回滚调用是否有效? 因为如果我们有一个已填满的数据库,并且我们实现了一个无法回滚的回滚,那么重置数据库可能是个问题......

【问题讨论】:

  • 这是一个非常黑暗的区域,迁移和迁移的回滚。这就是为什么我通常每天都设置数据库备份(明智的应用程序每天两次),以防止丢失任何数据。
  • 我在rake db:migrate 之后做的第一件事是rake db:rollback,只是为了检查迁移是否可以撤消。然后当我高兴时,我会再次迁移并继续前进。但是快乐依赖于手动测试 - 你提出了一个很好的建议:)

标签: ruby-on-rails migration rollback


【解决方案1】:

在迁移中放入大量代码可能会很棘手。就我个人而言,我只坚持修改架构的几行,即仅添加/删除列、更改列名/数据类型以及添加/删除索引。

我相信,这就是 Rails 在迁移中迁移到 change API 的原因。只要您坚持简单的架构更改,您就可以随时回滚,而无需测试您的迁移。

【讨论】:

    【解决方案2】:

    迁移的目的是前进。如果出现问题,您只能在开发过程中返回,但恕我直言,仅在迁移后立即返回,并且在其他计算机上未完成迁移时。

    例如,我创建了一个迁移,迁移,看到我打错了,回滚,修复迁移并再次迁移。

    现在,如果与此同时,我的超级快速同事已经使用旧迁移迁移了他的数据库,他永远不会知道我修复了迁移,所以他仍然会有错字(因为重做迁移不会改变任何架构版本)。因此,如果是这种情况,我更喜欢添加一个新的迁移来明确修复旧迁移,而不是修复/编辑旧迁移,而不是回滚。

    在团队环境中,以及在拥有多个部署平台时,恕我直言,这是首选方式。

    【讨论】:

      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 2012-08-27
      • 2021-07-01
      • 1970-01-01
      • 2018-09-14
      • 2018-10-31
      • 1970-01-01
      • 2018-08-01
      相关资源
      最近更新 更多