自从我的 rails 应用程序开始以来,我创建了很多迁移。其中一些仅用于测试目的。我现在有很多完全没用的迁移(例如:在迁移中创建一个表并在下一个迁移中删除它)。
随着 db:migrate 运行后 schema.rb 得到更新,是否可以删除所有迁移并从 schema.rb 的实际内容开始?
自从我的 rails 应用程序开始以来,我创建了很多迁移。其中一些仅用于测试目的。我现在有很多完全没用的迁移(例如:在迁移中创建一个表并在下一个迁移中删除它)。
随着 db:migrate 运行后 schema.rb 得到更新,是否可以删除所有迁移并从 schema.rb 的实际内容开始?
是的,您可以(并且可能应该)删除旧的迁移。由于您的模型代码将依赖于架构的更高版本,因此您的旧迁移可能不再起作用。
因此,请务必删除迁移(您将它们置于源代码控制之下,对吗?),然后使用
rake db:schema:load
如果需要,可以初始化一个新数据库。
更新:Rails 指南现在有类似的说法: http: //guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you
更好的方法是执行以下操作...
一旦您在项目中达到一个里程碑,并且您确定不想迁移到低于该版本的数据库,您可以将大量迁移文件替换为单个迁移文件,然后您可以将其用作新的迁移文件“初始”迁移将迄今为止完成的所有内容捆绑在一起。
之后:继续在您的项目中使用迁移!
永远不要手动编辑你的 schema.rb 文件。除非是为了灾难恢复,否则永远不要加载 db/schema.rb 文件。
您无法 100% 保证签入到版本控制的文件是最新的甚至是正确的版本。
上下迁移要安全得多,只需将大量迁移捆绑在一个迁移文件中即可。
通过手动加载 schema.rb 文件,您完全绕过了迁移提供的安全网。这不是一个好主意。