2011-07-20 10 views
7

時間の経過とともに時間の経過とともにMongoDBに移行したいRuby/Railsアプリケーションを手に入れました。一度。私は古いクラスを取り除くことができればと思っています。私はMongoMapperを使用する予定です。誰かが1つのアプリケーション内の両方のデータストアに接続できるようにデータベース設定ファイルを設定する方法を説明する例は見つけられません。同じRuby RailsプロジェクトでMongoMapperとActiveRecordを設定するには

FWIW、私はRails 3を使用しています。私は助けに感謝します。

答えて

6

gemfileにmongo_mapper gemを含めます。そして、あなたはゆっくりMongoMapperにオーバー移行を開始するモデルで、あなたは自分のモデルでこれを含める:ここ

include MongoMapper::Document 

はMongoの出版社のモデルの一例である

class Publisher 
    include MongoMapper::Document 

    key :_id, String 
    key :mtd_uniques, Integer 
    key :mtd_demo_uniques, Integer 
    key :archive, Array 
    key :ignore, Boolean 
end 

私のユーザモデルは( postgresの):

class User < ActiveRecord::Base 
    validates_presence_of :first_name, :last_name, :email, :type 
    acts_as_authentic 

    def self.inherited(child) 
    child.instance_eval do 
     def model_name 
     User.model_name 
     end 
    end 
    super 
    end 
end 

このことについての素晴らしい事はすべてがモンゴにオーバー移行するまで、あなたが2つの異なるデータベースを使用できるように、他のモデルのすべてが、まだのActiveRecordを使用することです。これは私が使っているものの例です。私のセットアップについてはpostgres(Herokuの上でホストされているアプリ)

を用いた大MongoMapperを使用して、データの集計、およびUserモデルはI私のconfig.yml

development: 
    adapter: MongoDB 
    host: localhost 
    database: my-dev-db 

test: 
    adapter: MongoDB 
    host: localhost 
    database: my-dev-db 

staging: 
    adapter: MongoDB 
    host: remote-host (for me amazon ec2) 
    database: my-staging-db 

production: 
    adapter: MongoDB 
    host: remote-host (for me amazon ec2) 
    database: my-production-db 

に設定のものをダンプし、2つのDB区別初期化子を作成しました:

/initializers/database.rb

# load YAML and connect 
database_yaml = YAML::load(File.read("#{Rails.root}/config/config.yml")) 
puts "Initializing mongodb" 
if database_yaml[Rails.env] && database_yaml[Rails.env]['adapter'] == 'MongoDB' 
    mongo_database = database_yaml[Rails.env] 
    MongoMapper.connection = Mongo::Connection.new(mongo_database['host'], 27017, :pool_size => 5, :timeout => 5) 
    MongoMapper.database = mongo_database['database'] 
end 
+0

設定ファイル –

+1

ありがとう@Chris。 'File.read("#{Rails.root} /config/config.yml ")'その後、それがうまくいった。これに答えて、それをはっきりさせる時間をとってくれてありがとう。 –

+0

ああそう! RAILS_ROOTを定数として設定しました。それがうまくいってうれしい。 –

2

それは前の回答から初期化コードは、もはや必要とされていることのように見えます。 mongo_mapperはファイルconfig/mongo.ymlを探し、それを解析して接続を開始します。 ActiveRecordのdatabase.ymlまたはMongoidのmonogoid.ymlと同様です。

Mongoマッパーには、このファイルを設定するためのRailsジェネレータが付属しています。あなたがしなければならないすべては次のとおりです。

rails g mongo_mapper:config 

これは、ような結果になっています彼らはReadmeファイルやドキュメントサイトでこれを言及した場合、それはいいだろう。もちろん、

defaults: &defaults 
    host: 127.0.0.1 
    port: 27017 

development: 
    <<: *defaults 
    database: db_name_development 
... 

。私はmongo_mapperバージョン0.10.1を使用しています

+0

合意。この投稿はちょっと古いものです。今は分析用にMongoDBを使用していますが、MongoMapperを使用していません。私は、mongo ruby​​ドライバ(https://github.com/mongodb/mongo-ruby-driver)を使用して、アプリケーションに必要なカスタム統合ポイントを作成するのが最善だと思います。 ActiveRecordにmongoドキュメントがARオブジェクトであると考えるのを欺く必要はありません。 –

関連する問題