MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Comment configurer MongoMapper et ActiveRecord dans le même projet Ruby Rails

Incluez votre gem mongo_mapper dans votre Gemfile. Ensuite, dans les modèles que vous souhaitez commencer lentement à migrer vers MongoMapper, vous incluez simplement ceci dans votre modèle :

include MongoMapper::Document

voici un exemple de modèle d'éditeur 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

Mon modèle utilisateur (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

La bonne chose à ce sujet est que tous vos autres modèles utilisent toujours ActiveRecord, vous pouvez donc utiliser 2 bases de données différentes jusqu'à ce que tout soit migré vers Mongo. Ceci est un exemple de ce que j'utilise. Agrégations de données volumineuses à l'aide de MongoMapper et modèle utilisateur à l'aide de postgres (application hébergée sur Heroku)

Pour ma configuration, j'ai vidé des éléments de configuration dans mon fichier 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

et créé un initialiseur qui différencie les 2 DB :

/initialiseurs/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