4

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

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

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

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

我的问题是:

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

1 回答 1

1

有趣的案例,我在当前项目中面临同样的问题。

我觉得你应该考虑第二点!

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

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

所以这个策略可能是:

  1. 从您的新架构为旧数据库架构的每个表创建一个 SQL 视图。
  2. 针对您的观点运行这些 INSERT。

首先,我将告诉您legacy_data gem,它基本上生成具有适当验证/关联的所有模型层,但在您的情况下它是无用的,因为您已经在 Rails 应用程序中设置了所有必要的模型。

于 2011-03-13T14:22:47.447 回答