我有一个使用DataMapper的现有ruby应用程序,我希望转换为不同的数据库类型,保留现有数据并仍然使用DataMapper。对于我的具体情况,我想从带有DataMapper的sqlite3转到使用DataMapper的postgress。我没有看到使用dm-migrations或其他各种dm- *工具来处理这个问题的优雅方法。有人有成功吗?
似乎理想的处理方法是将DataMapper导出为独立于数据库的“数据映射器”格式,然后重新导入到特定类型的数据库......但我找不到任何东西这样做。
我已经单独尝试将sqlite3数据库直接转换为postgress,但DataMapper则不喜欢生成的postgress数据库(不是一个巨大的震撼)。
答案 0 :(得分:0)
这远远超出了ORM旨在处理的范围。话虽如此,我已经与activerecord
做了类似的事情,并且能够提出一些我认为应该有用的东西。 强制性“代码尚未经过测试,使用风险自负”警告
第1步:
创建连接到postgres数据库的第二个数据库连接
第2步(这是烦人的部分):
创建模型的副本并指定新连接。您应该可以使用一些元编程来重新定义模型(它在IRB中使用标准的ruby对象,不确定它是否适用于DM,但它应该):
旧模型:
class Foo
include DataMapper::Resource
# properties
end
新模特:
[Foo].each do |klass|
Object.const_set("#{klass}Pg", Class.new(klass) do
def self.default_repository_name
:name_of_second_database_connection
end
end)
end
第3步:
循环模型:
[Foo].each do |klass|
klass.all.each do |obj|
Object.const_get("#{klass}Pg").create!(obj.attributes)
end
end