【问题标题】:How do I fix a botched migration that didn't remove a column?如何修复未删除列的拙劣迁移?
【发布时间】:2013-05-20 14:46:24
【问题描述】:

大约一周前,我进行了迁移,从我的第一个应用程序中删除了一个列:

class RemoveHalfOrFullFromFurlough < ActiveRecord::Migration
  def up
    remove_column :furloughs, :half_or_full
  end

  def down
    add_column :furloughs, :half_or_full, :decimal
  end
end

我一定是做错了什么,因为half_or_full 仍在我的架构中。直到今天我尝试添加 Active Admin gem 时才注意到。它出错是因为它试图从这个僵尸列中提取数据并且不知道如何处理它。

从那以后我进行了多次迁移,所以我认为简单的回滚不是一种选择。也许是?

这是创建列的原始迁移:

class AddHalfOrFullToFurloughs < ActiveRecord::Migration
  def change
    add_column :furloughs, :half_or_full, :decimal
  end
end

【问题讨论】:

  • 您的原始迁移(创建了 half_or_full 列的迁移)看起来如何?
  • @Anand 为您将其编辑为原始帖子。
  • 您可以使用rake db:migrate:down VERSION=xxxxxxxxxxxxxx 回滚特定的迁移,添加--trace 以查看引发了什么错误。
  • 做到了。它根本没有出错。刚刚完美地消除了该死的东西。谢谢!

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


【解决方案1】:

这是我的迁移理念:

当我处于开发阶段时,迁移的想法是我可以在 up 部分进行更改,并在 down 部分进行更改。根据我的需要,我可以回滚到起点并前进到顶部或中途停止。我仍在“开发”系统,并且正在创建有关我的数据库在任何时间点需要位于何处的规则。 (我控制水平。我控制垂直。)

当我调试迁移时,我有时会回滚一两个级别,然后前滚以微调更改。有人说我们应该只前滚,所以这一切都是完全可重现的。当数据是一次性的时,我通常认为撤消另一个迁移的愚蠢步骤是没有意义的,所以我将备份、调整并再次运行它。您或其他人的里程可能会有所不同。

一旦我从开发阶段进入测试和生产阶段,规则就会发生变化。我向前滚动到最后并留在那里,因为那时我的数据库和代码应该非常稳定,并且我正在“真实”加载数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-04
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多