导轨数据和模型迁移的策略



我需要迁移一些数据。我需要解密一些字段(这没问题),但是当我完成时,我需要更新模型以使用不同的策略来访问数据。

有没有办法避免两个部署?(一个用于迁移的迁移,一个用于迁移完成后的模型更新?)我需要在迁移中使用 old 模型,但是后来我需要新的。

您可以在迁移中添加虚拟ActiveRecord模型。那么您的迁移不再取决于原始模型及其实现。这使您可以在原始模型中更新代码。

类似的东西:

class MigrateFooOnBar < ActiveRecord::Migration
  class Bar < ActiveRecord::Base
    def foo_migration
      self.foo = some_deprecated_code
    end
  end
  def up
    add_column :bars, :foo
    Bar.find_each do |bar|
      bar.foo_migrate
      bar.save!
    end
  end
# ...
end

但这不能解决核心问题:在部署应用程序时,迁移永远不会同时运行。部署应用程序时,进行迁移的步骤在切换到新代码和Rails App的重新启动之前或之后运行。

取决于您的迁移需要多长时间 - 它可以在大桌子上运行几分钟(和数小时) - 您的应用将面临其在较新的数据库架构上运行旧代码的情况,或者必须在一个旧的数据库模式。

要避免在运行此类迁移时脱机应用程序,您将必须部署多个步骤:

  1. 部署迁移,将新列添加到数据库
  2. 部署可以使用两个版本的模式运行的代码更改
  3. 运行旧数据的数据传输和回填任务
  4. 部署向后删除Compyability的代码
  5. 运行迁移删除旧列

相关内容

  • 没有找到相关文章

最新更新