【问题标题】:Accessing ActiveRecord models from MongoDB application从 MongoDB 应用程序访问 ActiveRecord 模型
【发布时间】:2014-11-16 20:56:39
【问题描述】:
我有一个在 Rails 3 中构建的旧应用程序,使用 MongoDB 作为数据库(Mongoid 作为适配器)。
我将其移至 Rails 4 并使用 MySQL。我的计划是通过脚本将集合映射到自己的表中并复制数据。我很乐意做那部分。我一生都无法弄清楚如何连接到 MySQL 数据库。
我在 Rails 4 中创建了新应用程序和新数据库,例如,Contacts 的表映射到 MongoDB 中的集合。我要做的是在 Mongo 中找到所有联系人,然后连接到 MySQL DB 并将记录插入到表中。
我该如何做最后一部分?
谢谢
罗宾
【问题讨论】:
标签:
mysql
ruby-on-rails
mongodb
rails-activerecord
【解决方案1】:
我设法做到了如下。
1) 在新应用程序中创建了数据库模式。在这个阶段我并不担心关联,因为我会手动设置关联 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。