从MongoDB应用程序访问ActiveRecord模型

时间:2014-11-16 20:56:40

标签: mysql ruby-on-rails mongodb rails-activerecord

我使用MongoDB为数据库(Mongoid作为适配器)在Rails 3中构建了一个旧应用程序。

我正在将它移动到Rails 4并使用MySQL。我的计划是通过脚本将集合映射到自己的表中并复制数据。我很乐意做那个部分。我不能为我的生活弄清楚如何连接到MySQL数据库。

我在Rails 4和新数据库中创建了新的应用程序,例如,Contacts的表格映射到MongoDB中的集合。我想要做的是找到Mongo中的所有联系人,然后连接到MySQL DB并将记录插入表中。

我最后一部分怎么做?

由于

罗宾

1 个答案:

答案 0 :(得分:0)

我设法做到如下。

1)在新应用程序中创建了db模式。在这个阶段,我并不担心关联,因为我会手动设置关联ID。

2)在我在旧应用程序中调用transition.rb的文件中,我为我想要传输的每个类定义了迁移类,例如对于类Product,我使用以下模式定义了一个名为NewProduct的转换类:

class NewProduct < ActiveRecord::Base

  file = File.open("#{Rails.root}" + "/config/database.yml")
  dbconfig = YAML::load(file)
  establish_connection(dbconfig["development"])
  self.table_name = "products"

end

通过将mysql2 gem添加到旧的MongoDB应用程序中,我能够使用此模式连接到新应用程序中的相关表。

3)对于每个类,我然后迭代现有记录,通过迁移类将它们映射到新表。存在一些挑战,其中MySQL没有可用于直接映射的列,例如MySQL中没有Array列类型。对于这些情况,我创建了一个单独的类并手动创建了关联。

肯定有一些试验和错误的部分,但总的来说它运作得很好。我无法以编程方式完成的唯一部分是将上传的图像和文档关联回相关产品,但是由于这些上传的文件命名结构,创建关联的手动工作量不大。

对于那些感兴趣的人this is the gist of the file I used