我需要迁移一些数据。我需要解密一些字段(这没有问题),但当我完成时,我需要更新模型,以使用不同的策略进行数据访问。
有办法避免两次部署吗?(一个用于迁移,另一个用于迁移完成后的模型更新?)我需要在迁移中使用旧的模型,但是接下来我需要新的模型。
发布于 2015-05-09 22:46:05
您可以在迁移中添加一个虚拟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应用程序重新启动之前或之后执行迁移步骤。
取决于迁移所需的时间(以及在大表上运行几分钟(和几个小时)),应用程序将面临在较新的数据库模式上运行旧代码或在旧数据库模式上运行新代码的情况。
为了避免在运行此类迁移时将应用程序脱机,您必须部署多个步骤:
https://stackoverflow.com/questions/30145625
复制相似问题