换句话说,我想了解确保 self.down 实际回滚 self.up <的最佳方式em>在运行有问题的迁移之前。
如果我需要回滚迁移但 self.down 无法达到此目的,我该怎么办?
在处理可能具有破坏性的迁移时,哪种方法最佳? 只是一个数据库备份?
谢谢, 杜乔。
答案 0 :(得分:3)
您应该在不应包含实时数据的开发数据库上进行开发。因此,数据是否被破坏并不重要,因为您可以轻松地再次生成它?
如果您发现自己的开发数据很重要但不理想,那么数据库备份可能是合适的。
答案 1 :(得分:1)
通常,迁移应仅包含架构更改。在这种情况下,它应该是非常安全的&amp;易于在开发/测试环境中运行迁移。如果出现问题,您可以一直重新创建数据库并使用一些测试数据填充它。但是,如果您要测试一些与数据相关的迁移,那么当您在生产中实际运行它们时可能会出错。
在那种情况下,正如您所提到的,数据库备份是您应该依赖的。来一个适当的&amp;部署之前的快速恢复机制。
答案 2 :(得分:0)
要确保迁移的行为符合您的要求,您应该在开发环境中进行试验。
运行命令
rake -T
向您显示可用的任务,例如
rake db:migrate
或
rake db:rollback
答案 3 :(得分:0)
每次迁移都在事务中运行。记在脑子里。这意味着如果在单个迁移中出现问题,则会回滚迁移(如果有任何后续操作,则不会执行迁移)。
要测试迁移,无论是up
还是down
我插入了很多puts语句,以检查所有工作应该是什么,然后在我的最后一行中我引发异常。这将使rails认为迁移失败,并且它将回滚操作(就好像它从未发生过一样)。
当我确定一切正常时,我删除了提升行并让迁移真正起作用。 在你的情况下,你将测试加注,删除加注,而不是再次运行它我假设:)
希望这有帮助。