我建立在旧的数据库也具有不同表中某些打破纪录一个Rails 3.2的应用程序。 其中给予最头疼的问题是,它包含无效的日期。
我设置我手动固定一个时间,让我的代码工作的沙箱。 现在是时候进行部署。 为此,沙箱是每天晚上复位和实时数据库复制,深挖重建索引和迁移都重新申请。 我们将部署到沙盒往往在最后的修复部署到现场安装之前获得。
由于传统的PHP应用程序和新的Rails应用程序需要在几个星期并行运行到几个月,我们不能简单地一次性固定的日期( 更新:只是为了澄清,这意味着他们在同一个数据库同时运行时间)。 我需要一种方法来自动完成这个,可能与迁移或耙任务(我会去为后者)。
但问题是:ActiveRecord的电抗器上加载这些记录,所以我没有办法调查记录,并通过在Ruby代码做了一些硬编码假设固定的日期。
第二个问题是,传统的数据库有不一致之处,因为PHP代码没有使用事务和一些代码路径断了,留下孤儿和破表约束后面。 因为它们发生,其中大多数是在模型已经照顾我会处理这一点。 第一个问题去与日期。
你怎么通常会解决这个问题? 也许甚至还有一些神奇的宝石在那里,它支持通过拦截异常和运行一些尝试,以修复代码迁移与破纪录遗留数据库...
迁移路径使用MySQL,和三个生产环境(现场数据库稳定,具有相同的数据库,并与数据库克隆沙上演,每天晚上复位)。 我们决定不这样做一次性的数据映射/迁移,因为我们不能一步到位更换整个遗留应用程序(它由CMS的约50000篇,数以百计的主题,用图片和下载大文件的数据库,支持约10个网站,约12年的数据和工作,从不同的编程技巧凌乱的PHP代码,重复的代码从不同的迁移阶段,从合作伙伴网站的RSS内容拉动从那里混的文章/文章到我们自己的应用程序的主题文章时间表,以及更有趣的东西...
第一步是迁移后端应用程序,以获得一致的管理和发布接口。 遗留在前端应用仍然需要写入数据库(评论和游客创造其他内容)。 所以固定数据库的过程中必须能够定期自动运行。
我们已经到位修补程序妥善处理在belongs_to的和的has_many破碎模型的依赖性。 回形针一体化的设计与所有发明了神奇的文件名映射工作。 和空气制动宝石报告所有应用程序崩溃对我们的管理平台安装,所以我们得到所有左怪癖的简要概述。
在旧的应用程序已经被修改了最新的MySQL版本的工作,并已迁移到当前的MySQL数据库服务器。