0

我目前正在将遗留(Rails)应用程序数据模式重新设计到新的 Rails 应用程序中。我要做的是:

  • 1 迁移:在多个表中创建新字段,添加新字段
  • 1 Rake 任务:将遗留字段值分派到新创建的表字段中
  • 1 迁移:删除未使用的字段,删除一些遗留表

实际上它有效,但是是否可以将这 2 个迁移 + rake 任务“混合”到一个脚本中?除了一个一个地运行 3 个脚本之外,真的没有其他解决方案吗?(调度 rake 任务最多需要 10 分钟)。

当我将部署到生产环境中,从旧应用程序转移到新应用程序时,我真的更愿意“一枪搞定”。

4

3 回答 3

0

我建议您进行三个单独的迁移,即

  • 添加字段
  • 更新数据
  • 删除字段

第二个任务是“仅数据”迁移,只进行必要的更新。您需要确保此任务以正确的方式退出,具体取决于成功/失败,因为如果它失败/工作,您将依赖 ActiveRecords 迁移流控制来做正确的事情。

您现在需要在部署期间执行一个 rakedb:migrate命令

于 2013-09-06T07:25:13.710 回答
0

根据 rake 任务的复杂性,您可以在迁移文件中完成所有操作。在重新定义您需要访问的模型时要非常小心,以避免任何新的验证失败,因为这些列还不存在。谷歌寻求解决方案。

另一种方法是从处理此问题的中央 rake 任务中调用所有内容。我不确定我是否喜欢那样。

要记住的一件事......如果 rake 任务无法迁移某些数据会发生什么。在运行删除旧字段的迁移之前,您需要验证它是否正常工作。

于 2013-09-05T15:52:00.083 回答
0

好的,最后我只在需要时使用原始 SQL 语句使用一个单一的 rake 任务:

dropped_fields = "ALTER TABLE `locations` DROP `name`, DROP.....;"
ActiveRecord::Base.connection.execute(dropped_fields)
于 2013-09-06T07:07:13.357 回答