MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

So konfigurieren Sie MongoMapper und ActiveRecord im selben Ruby Rails-Projekt

Fügen Sie Ihr mongo_mapper-Gem in Ihr Gemfile ein. Dann fügen Sie in den Modellen, die Sie langsam zu MongoMapper migrieren möchten, einfach Folgendes in Ihr Modell ein:

include MongoMapper::Document

Hier ist ein Beispiel für ein Mongo-Publisher-Modell

class Publisher
  include MongoMapper::Document

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

Mein Benutzermodell (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

Das Schöne daran ist, dass alle Ihre anderen Modelle immer noch ActiveRecord verwenden, sodass Sie zwei verschiedene Datenbanken verwenden können, bis alles zu Mongo migriert ist. Dies ist ein Beispiel von dem, was ich verwende. Große Datenaggregationen mit MongoMapper und Benutzermodell mit Postgres (auf Heroku gehostete App)

Für mein Setup habe ich Konfigurationsmaterial in meiner config.yml abgelegt

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

und einen Initialisierer erstellt, der zwischen den 2 DBs unterscheidet:

/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