Voeg je mongo_mapper-edelsteen toe aan je Gemfile. Vervolgens neemt u in de modellen die u langzaam naar MongoMapper wilt migreren dit gewoon op in uw model:
include MongoMapper::Document
hier is een voorbeeld van een Mongo-uitgeversmodel
class Publisher
include MongoMapper::Document
key :_id, String
key :mtd_uniques, Integer
key :mtd_demo_uniques, Integer
key :archive, Array
key :ignore, Boolean
end
Mijn gebruikersmodel (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
Het leuke hiervan is dat al je andere modellen nog steeds ActiveRecord gebruiken, zodat je 2 verschillende databases kunt gebruiken totdat alles naar Mongo is gemigreerd. Dit is een voorbeeld van wat ik gebruik. Grote gegevensaggregaties met MongoMapper en gebruikersmodel met postgres (app gehost op Heroku)
Voor mijn setup heb ik configuratiedingen in mijn config.yml gedumpt
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
en creëerde een initializer die onderscheid maakt tussen de 2 DB's:
/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