Ruby on rails 混合Rake任务和迁移(从旧版迁移到新Rails应用程序)

Ruby on rails 混合Rake任务和迁移(从旧版迁移到新Rails应用程序),ruby-on-rails,rails-migrations,rake-task,Ruby On Rails,Rails Migrations,Rake Task,我目前正在将一个遗留(Rails)应用程序数据模式重新设计为一个新的Rails应用程序。我要做的是: 1迁移:在多个表中创建新字段,添加新字段 1 Rake任务:将旧字段值分派到新创建的表字段中 1迁移:删除未使用的字段,删除一些旧表 实际上,它是可行的,但是否可以将这两个迁移+rake任务“混合”到一个脚本中?除了逐一运行3个脚本,真的没有其他解决方案吗?(分派rake任务最多需要10分钟) 当我要部署到生产环境中时,我真的更愿意只使用一个命令行,从旧应用程序转移到新应用程序。根据rake

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

  • 1迁移:在多个表中创建新字段,添加新字段
  • 1 Rake任务:将旧字段值分派到新创建的表字段中
  • 1迁移:删除未使用的字段,删除一些旧表
实际上,它是可行的,但是否可以将这两个迁移+rake任务“混合”到一个脚本中?除了逐一运行3个脚本,真的没有其他解决方案吗?(分派rake任务最多需要10分钟)


当我要部署到生产环境中时,我真的更愿意只使用一个命令行,从旧应用程序转移到新应用程序。

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

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


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

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

dropped_fields = "ALTER TABLE `locations` DROP `name`, DROP.....;"
ActiveRecord::Base.connection.execute(dropped_fields)

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

  • 添加字段
  • 更新数据
  • 降落场
第二个任务是“仅数据”迁移,只进行必要的更新。您需要确保此任务以正确的方式退出(取决于成功/失败),因为如果它失败/工作正常,您将依靠ActiveRecords迁移流控制来执行正确的操作


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

关于数据验证,您是对的,我在rake任务中一直使用异常和标志来执行。最后,如果未引发此标志且未引发异常,则执行字段和表的删除。