sql >> Database >  >> NoSQL >> MongoDB

Hoe MongoMapper en ActiveRecord in hetzelfde Ruby Rails-project te configureren?

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


  1. Foreman stopt per direct

  2. Hoe de telwaarde te krijgen met $lookup in mongodb met golang?

  3. Selecteer op basis van tijdstempel en update tijdstempel met nul

  4. MongoDB kopieert een veld naar een andere verzameling met een externe sleutel