2013-02-13 2 views
1

내 프로젝트에서 datamapper와 mongoid를 사용하려고합니다. 나는 https://github.com/solnic/dm-mongo-adapter 링크를 따라 갔다. 그러나 그다지 많은 정보가 없습니다. 나는이 게시물 datamapper 및 sqlite3 어댑터 동화 : http://net.tutsplus.com/tutorials/ruby/ruby-for-newbies-working-with-datamapper/ 모든 sqlite3 괜찮지 만, 나는 mongodb로 수렁.(Mongodb & Datamapper) 초기화되지 않은 상수 DataMapper (NameError)

콘솔에서 "ruby rm.db"를 실행하면 "dm.rb : 1 : in : ': 초기화되지 않은 상수 DataMapper (NameError) 오류가 발생합니다.

이 문제를 어떻게 해결할 수 있습니까?

dm-core 
dm-aggregates 
dm-migrations 
mongo 
mongodb 
mongo_ext 

가 그럼 난 프로젝트의 루트에 dm.rb 라는 이름의 파일에 코드를 아래에 추가 : 내가 아래에있는 내 gemfile 이러한 보석을 추가했다.

DataMapper.setup(:default, 
    :adapter => 'mongo', 
    :database => 'my_mongo_db', 
) 

# Define resources 
class Student 
    include DataMapper::Mongo::Resource 

    property :id, ObjectId 
    property :name, String 
    property :age, Integer 
end 

class Course 
    include DataMapper::Mongo::Resource 

    property :id, ObjectId 
    property :name, String 
end 

# No need to (auto_)migrate! 
biology = Course.create(:name => "Biology") 
english = Course.create(:name => "English") 

# Queries 
Student.all(:age.gte => 20, :name => /oh/, :limit => 20, :order => [:age.asc]) 

# Array and Hash as a property 
class Zoo 
    include DataMapper::Mongo::Resource 

    property :id, ObjectId 
    property :opening_hours, Hash 
    property :animals, Array 
end 

Zoo.create(
    :opening_hours => { :weekend => '9am-8pm', :weekdays => '11am-8pm' }, 
    :animals  => [ "Marty", "Alex", "Gloria" ]) 

Zoo.all(:animals => 'Alex') 
+0

Datamapper를 Mongodb의 ORM으로 사용하려는 추론은 무엇입니까? [** Mongoid **] (http://mongoid.org/)에 시험해 보셨습니까? –

+0

Mongoid를 시도했지만 정상적으로 작동합니다. 사실 datamapper.org에서는 dm-sqlite-adapter, dm-mysql-adapter, dm-postgres-adapter와 같은 3 가지 어댑터가 언급되었으며 dm-mongo-adapter도 볼 수 없었습니다. 다른 한편으로, dm-mongo-adapter를 사용하는 데있어서의 avantages 나 단점은 무엇입니까? – pegatron

답변

1

두 부분으로 나눠 답변 해 드리겠습니다.

먼저 현재 문제를 해결하기 위해 문제는 사용하려고하기 전에 DataMapper가 필요하지 않은 것처럼 보입니다. rm 파일 상단에 dm-mongo-adapter가 필요하거나 직접 Gemfile에서 직접 할 수있는 bundler를 사용하고 있기 때문에 가능합니다.

# add this to the beginning of your dm.rb file 
require 'dm-mongo-adapter' 

# or put this in your Gemfile, run with `bundle exec dm.rb` 
gem 'dm-mongo-adapter', :require => true 

둘째, dm-mongo-adapter의 사용에 관한 것입니다. 이 접근 방법에는 두 가지 문제가 있습니다.이 두 가지 문제는 현재와 미래의 두 가지 문제가 될 것입니다.

  1. MongoDB는 쿼리에 SQL 구문을 사용하지 않으며 비 관계형 데이터베이스입니다. DataMapper는 마치 쿼리 언어로 SQL을 전적으로 기반으로하며 모든 API 및 문서 모델링 도우미는 관계 데이터 모델링을 염두에두고 설계되었습니다.

    사용중인 mongo 어댑터는 SQL 구문에 익숙한 개발자들을 위해 그 격차를 좁히기 위해 고안되었지만 두 가지 접근 방식이 매우 다르므로 가난한 상황으로 인해 최적 이하의 성능으로 끝날 수 있습니다 쿼리, 빈약 한 인덱스 및 MongoDB와 같은 데이터베이스에서 실제로 사용하도록 설계되지 않은 빈약 한 데이터 모델을 포함합니다.

    이 방법을 사용하는 대신 Mongoid 또는 Mongo Mapper (또는 mongo 보석 자체 만 사용)을 확인하는 것이 좋습니다.

    또한 10gen의 웹 사이트에서 MongoDB와 기존의 관계형 DB가 어떻게 다른지에 대한 좋은 토론과 프레젠테이션이 있어야하며 응용 프로그램 문제를 만들기 전에 차이점을 이해해야합니다. http://www.10gen.com/presentations/schema-design-4

  2. 당신은 DM-몽고-어댑터 github 보면이 표시되지 않습니다

    http://www.10gen.com/presentations/building-your-first-app-introduction-mongodb-0

    은 년 이상에 업데이트되었습니다합니다. 이것은 아마도 내가 위에 쓴 것과 관련이 있을지 모르지만 그 자신의 문제를 일으킬 것입니다. 최신 버전의 MongoDB를 사용하여 이전 버전을 성공적으로 사용할 수 없을 수도 있으며, 새로운 MongoDB 기능을 확실히 활용할 수 없습니다.

+0

정말 명확한 게시물, 정말 고마워 .. – pegatron

+0

내 기쁨, 그것이 도움이되기를 바랍니다. DataMapper는 관계형 DB에 대한 저의 갈망입니다. 그러나 불행하게도이 어댑터를 사용하더라도 MongoDB와 함께 사용하기에 적합하지 않습니다. –