Rails中如何移除之前的数据库迁移记录

8

我从我的Rails应用程序开始就创建了很多迁移。其中一些仅用于测试目的。现在我有很多完全无用的迁移(例如:在一个迁移中创建一个表,在下一个迁移中删除它)。

由于在运行db:migrate时,schema.rb会得到更新,所以是否可以删除所有迁移并从实际内容开始? schema.rb?


1
你可以使用 rake db:schema:load - Mikhail Nikalyukin
删除所有迁移文件吗? - Luc
2个回答

8

是的,你可以(而且可能应该)删除旧的迁移。随着模型代码依赖于后续版本的架构,你的旧迁移有可能不再起作用。

因此,请放心删除这些迁移文件(你确保将它们纳入源代码管理了吗?),使用

rake db:schema:load

如果需要,可以初始化一个新的数据库。

更新:Rails指南现在也有类似的内容:http://guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you


5
你应该把所有东西都放在源代码控制中 - 这样,你可以随时删除或修改任何内容,而不用担心是否有可能需要它。因为你可以随时恢复到之前的版本。 - Thilo
在我看来,这是非常危险的建议Thilo——因为这样人们就开始依赖于db/schema.rb文件,一旦他们手动编辑它或忘记检查它,他们可能会真正破坏他们的模式,并完全规避迁移的整个目的。 - Tilo
@Tilo 我非常尊重您的意见。使用源代码控制可以消除“一旦他们手动编辑它”的影响。“或者忘记提交”可以通过正确使用源代码控制来消除。schema.rb 应该是您的权威来源。在我看来,他们应该依赖于它,而不是迁移。 - Thilo
参见http://guides.rubyonrails.org/active_record_migrations.html#schema-dumping-and-you:“没有必要(而且容易出错)通过重放整个迁移历史来部署应用程序的新实例。将当前模式的描述加载到数据库中要简单得多,也更快。” - Thilo
那么,你如何防止在后续过程中发生意外编辑?我指出这一点是因为我在现实生活中见过这种情况。 - Tilo
显示剩余5条评论

1
更好的方法是按照以下步骤进行操作...
在项目中达到一个里程碑并确保您不想迁移到DB的低版本后,您可以使用单个迁移文件替换大量的迁移文件,然后将其用作新的“初始”迁移,捆绑所有截至该日期完成的内容。
之后:继续在项目中使用迁移!
永远不要手动编辑schema.rb文件...除非出现类似灾难恢复之类的情况,否则不要加载db/schema.rb文件。
您无法100%保证检入版本控制的文件是最新或正确的版本。
上下迁移更加安全,只需将大量迁移打包到一个单一的迁移文件中即可。
通过手动加载schema.rb文件,您完全绕过了迁移提供的安全网。这只是一个不好的主意。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接