2012-04-12 85 views
7

自我的Rails应用开始以来,我创建了很多迁移项目。其中一些仅用于测试目的。我现在有很多完全没用的迁移(例如:在迁移中创建一个表并将其放入下一个表中)。删除过去的轨道迁移

由于schema.rb获取更新一次db:migrate运行,是否可以删除所有的迁移并从schema.rb的实际内容开始?

+1

您可以使用'rake db:schema:load' – 2012-04-12 11:40:43

+0

并删除所有迁移文件? – Luc 2012-04-12 11:43:21

回答

8

是的,你可以(也可能应该)删除旧的迁移。由于你的模型代码将取决于你的模式的更新版本,所以你的旧迁移可能会失效。

因此,通过各种手段删除迁移(你有他们的源代码控制下,对吧?),并使用

rake db:schema:load 

如果你需要初始化一个新的数据库。

UPDATE:Rails的指导现在有类似的东西说这个:http://guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you

+0

使用'rake db:schema:load'而不是'rake db:migrate'? – methyl 2012-04-12 11:53:55

+0

编号'rake db:schema:load'转储您当前的数据库并从'schema.rb'重新创建它。 'rake db:migrate'将任何未完成的迁移应用于现有的数据库。 – Thilo 2012-04-12 11:54:54

+0

如果我拥有schema.rb的最后一个版本,为什么让他们在源代码控制中很重要?不应该是那个重要的人吗? – Luc 2012-04-12 16:00:01

0

一个更好的方式来做到这一点是做到以下几点...

当你到达你的项目的一个里程碑,并且您确定不希望在该版本的数据库下迁移,您可以用一个迁移文件替换大量的迁移文件,然后您可以将其用作捆绑启动的新“初始”迁移到目前为止所做的一切。

之后:继续在项目中使用迁移!

绝不要手动编辑您的schema.rb文件..并且永远不会加载db/schema.rb文件,除非它是用于灾难恢复之类的东西。

您没有100%保证签入版本控制的文件是最新版本,甚至是正确的版本。

上下迁移并将大量迁移捆绑到一个迁移文件中会更安全。

通过手动加载schema.rb文件,您完全绕过了迁移提供的安全网。这不是一个好主意。