2011-08-17 68 views
0

在我想知道,以确保self.down实际上回滚self.up之前运行迁移问题的最佳途径。换句话说。在运行之前是否有一种简单的方法来测试迁移?

如果我需要回滚迁移,但我能做些什么但self.down不符合目的?

处理潜在的破坏性迁移时,哪种方法是最佳做法? 只是一个数据库备份?

谢谢, Duccio。

+1

在生产环境中运行迁移时,您应该始终保持备份,这只是一个很好的做法,因为您永远不知道可能会出现什么问题,如果在运行迁移过程中电源中断,会发生什么情况?宁可安全,也不要抱歉。 – jonnii

回答

3

您应该开发一个不应包含实时数据的开发数据库。因此,数据是否被破坏并不重要,因为您可以轻松再次生成数据?

如果您发现自己处于开发数据很重要但不理想的情况,则可能需要进行数据库备份。

+0

是的,我正在开发环境中开发。在目前的任务中,我的开发数据非常重要,因为我需要它来了解** self.down **是否能够完成工作。事实是:如果我在没有做过数据库备份的情况下运行** self.up **,而不是_wrong_ ** self.down **,那么修复和测试self.down会比较困难,因为初始状态(错误回滚之前的数据库)将被更改。所以我猜在这种情况下值得做一个数据库备份......但我认为理想的情况是让脚本生成的虚拟数据轻松恢复以前的状态。 – Darme

1

通常,迁移应只包含模式更改。在这种情况下,它应该非常安全,易于在开发/测试环境中运行迁移。如果出现问题,您可以重新创建数据库并用一些测试数据填充它。但是如果你有一些数据相关的迁移需要测试,那么当你在生产中实际运行它们时可能会出错。

在那种情况下,正如你所提到的,数据库备份是你应该依赖的。在部署前请提供适当的&快速恢复机制。

0

要确保迁移的行为符合您的要求,您应该在开发环境中进行试验。

运行命令

rake -T 

向您展示可用的任务,如

rake db:migrate 

rake db:rollback 
0

每个移民事务内部运行。记住这一点。这意味着,如果在单个迁移中出现问题,则迁移将回滚(如果有任何后续操作,则不会执行迁移)。

要测试迁移,不管是up还是down我插入了很多puts语句,以检查所有工作已经应该,然后在我的最后一行我引发一个异常。这会让Rails认为迁移失败,并且会回滚操作(就好像它从未发生过)。

当我确定所有东西都能正常工作时,我删除了提升线并让迁移真正起作用。 在你的情况下,你会测试加注,删除加注,不再运行它,我假设:)

希望这会有所帮助。

相关问题