回滚后是否应该删除迁移文件?

5
我对Ruby和Rails还比较新,正在努力理解迁移。 我的问题是回滚后删除迁移的最佳实践或正确时间是什么。到目前为止,据我所知,是否删除迁移文件在某种程度上取决于个人意见。但是,在团队中工作时删除迁移文件是否有任何重大影响?相对于删除它,保留迁移文件是否有任何好处?对于我的情况,什么最有意义?我原来有一个迁移文件20140731141350_create_users.rb
class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.string :email
      t.string :password

      t.timestamps
    end
  end
end

我需要添加一个salt列,所以我创建了迁移20140804125449_add_salt_colum_to_users.rb

class AddSaltColumToUsers < ActiveRecord::Migration
  def change
    add_column :users, :salt, :string
  end
end

在开发过程中,我意识到salt列是不必要的,并进行了修改。

rake db:migrate:down VERSION=20140731141350

现在我有一个未使用的20140804125449_add_salt_colum_to_users.rb迁移文件。

是要删除还是保留?


1
如果它不需要,就删除它。 - mcfinnigan
3个回答

8

您不应更改旧的迁移记录。如果发现某个列不必要,可以编写新的迁移记录来删除它。

原因是为了能够在开发的任何阶段恢复数据库架构。如果您正在团队中工作,则删除迁移记录的事实不会更改您的团队成员的模式。更重要的是,他们现在没有可回滚的迁移记录!


10
对我来说,唯一的例外是如果您还没有推动那个迁移。 - Frederick Cheung
如果迁移可能会影响到某人,那就保留它。如果不会,就删除它,这只会让事情变得更加复杂。 - Renra
这是我的想法。我正在本地开发,还没有将任何内容推送到团队,因此我的更改不会影响任何人,那么是否需要创建另一个迁移来撤消添加盐列的迁移?然后我将基本上创建了2个迁移,以使我回到原始迁移,这对我来说似乎很混乱... - SteWoo
@SteWoo - 另一个保留它们的原因是为了历史一致性。如果您想要查看应用程序在某个时间点的行为方式,您可能会不幸地得到应用程序具有此字段的历史记录点。当时迁移文件确实存在,因此您更新了模式,然后需要重新还原它。但是,如果您尚未推送它并且它是您最近的迁移,则我认为没有理由保留它。但请注意,这通常是例外而不是规则。 - BroiSatse

2

请看这篇关于Rails迁移的博客文章。 正如本文所述:

当我启动新环境时,运行rake db:schema:load要容易得多。而且迁移是多余的。所有这些数据都在模式文件中。

因此,如果没有其他迁移依赖于此迁移,请删除它。


0

永远不要删除或编辑旧的迁移!即使是独自工作或与团队合作,这样做也会给您的应用程序带来很多危害。


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