2014-09-07 4 views
0

기존 데이터를 보존하면서 DataMapper를 계속 사용하면서 다른 데이터베이스 유형으로 변환하려고하는 DataMapper를 사용하는 기존 루비 애플리케이션이 있습니다. 제 경우에는 DataMapper가있는 sqlite3에서 DataMapper를 사용하여 postgress로 이동하려고합니다. 나는 dm-migrations이나 다른 여러 dm- 도구로 이것을 처리하는 우아한 방법을 보지 못했습니다. 성공한 사람이 있습니까?기존 DataMapper 앱 데이터를 다른 데이터베이스 유형으로 변환

DataMapper가 데이터베이스 독립적 인 "데이터 매퍼"형식으로 내 보낸 다음 특정 유형의 데이터베이스로 다시 가져올 수있는 능력이 가장 이상적이라고 생각합니다. 그러나 찾을 수 없습니다. 이 일을 할 수있는 모든 것.

나는 별도로 sqlite3 데이터베이스를 직접 postgress로 변환하려고 시도했지만 DataMapper는 그 결과 postgress 데이터베이스를 좋아하지 않습니다 (엄청난 충격이 아닙니다).

답변

0

이것은 ORM이 처리 할 수있는 범위를 벗어난 내용입니다. 그 말은, 내가 activerecord과 비슷한 일을하고 내가해야한다고 생각하는 뭔가를 생각해 냈습니다. (

이 포스트 그레스 데이터베이스

2 단계에 연결하는 두 번째 데이터베이스 연결을 생성이 : 필수

1 단계 경고 "코드가 테스트되지 않았습니다, 당신의 자신의 위험에 사용" 귀찮은 부분) :

모델 복사본을 만들고 새 연결을 지정하십시오.

올드 모델 :

class Foo 
    include DataMapper::Resource 
    # properties 
end 

을 당신은 모델을 재정의하는 몇 가지 메타 프로그래밍을 사용할 수 있어야합니다 (이 DM을 위해 작동하지만이해야하는 경우는, 표준 루비 객체와 IRB에 확실하지 일) 새로운 모델 : 모델을 통해

루프 :

[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