【问题标题】:Remove past migration in rails删除过去在 Rails 中的迁移
【发布时间】:2012-04-24 18:02:25
【问题描述】:

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

随着 db:migrate 运行后 schema.rb 得到更新,是否可以删除所有迁移并从 schema.rb 的实际内容开始?

【问题讨论】:

  • 你可以使用rake db:schema:load
  • 并删除所有迁移文件?

标签: ruby-on-rails ruby-on-rails-3 rails-migrations


【解决方案1】:

是的,您可以(并且可能应该)删除旧的迁移。由于您的模型代码将依赖于更高版本的架构,因此您的旧迁移可能不再起作用。

因此,请务必删除迁移(您将它们置于源代码控制之下,对吗?),然后使用

rake db:schema:load

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

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

【讨论】:

  • 使用rake db:schema:load 代替rake db:migrate?
  • 没有。 rake db:schema:load 转储您当前的数据库并从 schema.rb 重新创建它。 rake db:migrate 将所有未完成的迁移应用到现有数据库。
  • 如果我有 schema.rb 的最新版本,为什么将它们置于源代码控制中很重要?不应该是那个重要的人吗?
  • 您应该在源代码管理中拥有所有内容 - 这样,您可以删除(或修改)任何内容,而不必担心是否再次需要它。因为您始终可以恢复以前的版本。
  • 我总是在源代码管理中拥有一切,但我的问题更多是想知道是否可以彻底摆脱非常古老的迁移。如果我要在全新的服务器上部署我的应用程序,schema.rb 就足够了吗?
【解决方案2】:

更好的方法是执行以下操作...

一旦您在项目中达到里程碑,并且您确定不想迁移到低于该版本的数据库, 您可以将大量迁移文件替换为单个迁移文件,然后您可以将其用作新的“初始”迁移,它将迄今为止完成的所有内容捆绑在一起。

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

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

您无法 100% 保证签入到版本控制的文件是最新的甚至是正确的版本。

上下迁移更安全,只需将大量迁移捆绑在一个迁移文件中即可。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多