在构建 Web 应用程序时,是否经常出现一长串迁移文件?我似乎在添加一长串迁移文件,因为我一直忘记或一直想在“已经”迁移的数据库表中添加一个额外的列。
4 回答
拥有一长串迁移文件是正常的。这是 Rails 的最佳功能之一。把它们想象成层层叠叠(像洋葱一样)。如果您添加了一个新的列或表,然后您决定不再需要它,您可以回滚(剥离)最新的更改。只要你有迁移文件,你就可以轻松地来回移动(不建议移动太多,但你明白了)。记住不要删除迁移文件,除非您进行回滚。当您回滚并删除迁移文件时,请确保您处于正确的层(回滚点)。
为什么?因为例如当有人克隆您的应用程序并运行您的迁移文件时,它会从头到尾遍历所有迁移文件。如果中间的某些东西被弄乱或删除了,您将无法创建数据库,因为它经历了所有步骤。希望能帮助到你。
还有一点需要注意,来自 rails docs
如果您需要在另一个系统上创建应用程序数据库,您应该使用 db:schema:load,而不是从头开始运行所有迁移。后者是一种有缺陷且不可持续的方法(您积累的迁移越多,运行速度越慢,出现问题的可能性就越大)。
强烈建议将此文件(schema.rb)签入您的版本控制系统。
这可能是个坏习惯,但我使用 rake 向下迁移db:migrate VERSION=0
,然后更改具有(例如)用户的相应迁移,最后使用rake db:migrate
. 这样我就不那么乱了,并且确切地知道哪个迁移对什么模型做了什么。它更干净,但我想这种技术只能在 webapp 的开头使用。希望这可以帮助。
IMO,如果你正确地进行迁移,它应该有一个很长的迁移列表。因为你必须通过迁移来做每一个小改变。正如您所说,正确的方法是在需要更改表时添加新的迁移。
所以正如我提到的,我相信有越来越多的迁移意味着你做对了。(因为大多数情况下,当您需要更改现有表时,您无法删除该表并重新创建它)。
但是话虽如此,不时运行rake db:migrate
(对于隔离的数据库)总是一个好主意,以确保您的迁移作为一个组工作。