ruby-on-rails-3mongoidmultiple-databasesmongoid3querying

Connecting to two databases Mongoid


I have two databases that I have to use in my application. I have the following in my mongoid.yml:

development:
  # Configure available database sessions. (required)
  sessions:
    # Defines the default session. (required)
    default:
      # Defines the name of the default database that Mongoid can connect to.
      # (required).
      database: db_development
      username: myusername
      password: mypassword
      # Provides the hosts the default session can connect to. Must be an array
      # of host:port pairs. (required)
      hosts:
        - myserverip:27017
      databases:
        secondary:
          database: db2_development
          username: myusername
          password: mypassword
          # Provides the hosts the default session can connect to. Must be an array
          # of host:port pairs. (required)
          hosts:
           - myserverip:27018          

In my model file:

class MyModel
   include Mongoid::Document
   store_in database: "secondary"
   field :name, type: String
   field :age, type: Integer
end

I have data in MyModel. When I tried to query, I'm go the following error:

Moped::Errors::QueryFailure (The operation: #<Moped::Protocol::Query
  @length=96
  @request_id=5
  @response_to=0
  @op_code=2004
  @flags=[:slave_ok]
  @full_collection_name="secondary.mymodel"
  @skip=0
  @limit=0
  @selector={"name"=>"Tom"}
  @fields=nil>
  failed with error 10057: "unauthorized db:secondary ns:secondary.mymodel lock type:0 client:10.100.55.40"

I tried searching online but could not get any solution. Any help would be appreciated. Thanks in advance.


Solution

  • hmm well can you do this seem like you messed your yaml file

    development:
      sessions:
        default:
          database: db_development
          username: my_username
          password: my_password
          hosts:
            - myserverip:27017
          options:
            consistency: :eventual
        writeable:
          database: db2_development
          username: myusername2
          password  mypassword2
          hosts:
            -  myserverip2:27018
          options:
            consistency: strong
    

    In your model just write this

    store_in session: "writeable"

    class MyModel
       include Mongoid::Document
       store_in session: "writeable"
       field :name, type: String
       field :age, type: Integer
    end
    

    FYI Never tested with password options but i guess it would work

    Hope this help