我正在开发的Rails应用程序到目前为止已有约35个迁移。由于该应用程序最初是作为一个实验开始的,因此在我反复尝试不同的想法时存在相当多的无意义的变动。
将迁移1-35合并成一个迁移是否有任何缺点?我计划通过第一个迁移加载当前模式并删除所有先前的迁移来完成这个步骤。
如果只有我自己在这个项目上工作,那是否有所不同?
我正在开发的Rails应用程序到目前为止已有约35个迁移。由于该应用程序最初是作为一个实验开始的,因此在我反复尝试不同的想法时存在相当多的无意义的变动。
将迁移1-35合并成一个迁移是否有任何缺点?我计划通过第一个迁移加载当前模式并删除所有先前的迁移来完成这个步骤。
如果只有我自己在这个项目上工作,那是否有所不同?
如果您的代码已经在源代码控制下(您确实将代码放在了源代码控制下,不是吗?)那么我认为没有什么实质性的伤害,只要您接受回滚模式更改需要恢复旧的迁移或创建全新的迁移的事实。在最终确定前确保您理解这些影响并接受它们。
您当前的schema.rb可以成为启动新集合的新单个迁移的基础。
请注意,如果您的现有迁移中包含数据操作,例如静态数据加载和/或可能的后续转换,则这些操作需要在某处处理。这是我遇到过几次的问题...
rake db:schema:load
使用更快速的方法代替运行
rake db:migrate
rake db:schema:load
。rake db:migrate VERSION -1
[我把注意力从文本上转移开来,归咎于分散注意力的新动画标志]# Note that this schema.rb definition is the authoritative source for your
# database schema. If you need to create the application database on another
# system, you should be using db:schema:load, not running all the migrations
# from scratch. The latter is a flawed and unsustainable approach (the more migrations
# you'll amass, the slower it'll run and the greater likelihood for issues).
注意,正如 @mike-woodhouse 所说,“请注意,如果您的现有迁移中存在数据操作,例如静态数据加载和/或可能的后续转换,则这些操作需要在某个地方处理。”
但是你不应该在迁移中做任何这样的操作 :) -- Chad
对于那些像我一样通过搜索找到这个答案来寻找将应用程序重置回其原始状态的方法的人,以下是要做的事情:
rm db/migrations/*
rake db:drop
rake db:schmea:dump
如果你刚开始开发一个应用程序,决定重新开始建立,而不想丢失所有的文件,这将非常有用。