将多个旧数据库迁移到一个Rails应用程序中

时间:2011-03-13 13:59:46

标签: ruby-on-rails drupal migration legacy-database

我有几个(旧的)Drupal网站需要用一个新的Rails应用程序替换。该新网站应该包含所有旧的Drupal内容。旧的Drupal内容部分被破坏(由于近7年的不稳定升级,已停产的模块等)。事实上它是Drupal几乎不相关,只是它导致一些不一致,奇怪的命名和严重规范化的表。

需要导入Rails应用程序的内容很简单:内容(博客条目),附加文件(图像)和注释。我有两个数据库是“陈旧”(不在生产​​中),还有两个正在生产,但允许下载/锁定一段时间(几小时,几天)。因此,迁移不需要针对速度进行优化,也不需要完全保存(意思是:我可以放弃在运行迁移时发布的评论)

Rails(3)应用程序主要完成,并且仅使用Active-record约定。

由于存在约束(破坏,数据库不一致,需要合并的几个数据库),我更喜欢为此编写迁移,而不是将我的新Rails应用程序连接到一个丑陋,不一致的遗留数据库。

我的问题是:

  • 是否有任何环境,宝石或工具可以更轻松地在Rails中导入:例如允许在某些DSL中从旧版进行简单映射的东西。
  • 或者更容易在SQL中完全编写我的迁移:SQL查询会将旧数据转换为适合Rails应用程序的结构吗?迁移来自MySQL-> MySQL。
  • 或者我应该只将Activerecord连接到旧数据库,遍历每一行/结果并运行Object.save!在我的rails应用程序?

1 个答案:

答案 0 :(得分:1)

有趣的案例,我在目前的项目中遇到了同样的问题。

我认为你应该考虑第二点!

  

或者更容易编写我的迁移   完全在SQL中:SQL查询将会   将旧数据转换为结构   适合Rails应用程序?迁移是   来自MySQL-> MySQL。

编写SQL迁移以将数据从旧数据库导入到新数据库,然后使用新模式!我想你有一个转储SQL文件,其中包含每个旧数据库的INSERT查询列表。

所以这个策略可能是:

  1. 从新架构中为旧数据库架构的每个表创建一个SQL视图。
  2. 针对您的观点运行这些INSERT。
  3. 首先,我将告诉你关于legacy_data gem的内容,它基本上会生成具有相应验证/关联的所有模型层,但鉴于您已经拥有所有必需的模型,它在您的情况下是无用的在Rails应用程序中设置。