Подключение к двум базам данных Mongoid

У меня есть две базы данных, которые я должен использовать в своем приложении. У меня есть следующее в моем 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          

В моем файле модели:

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

У меня есть данные в MyModel. Когда я пытался сделать запрос, я получаю следующую ошибку:

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"

Я пытался искать в Интернете, но не смог найти никакого решения. Любая помощь будет оценена. Заранее спасибо.

1 ответ

Решение

Хм хорошо вы можете сделать это, кажется, вы испортили свой файл YAML

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

В вашей модели просто напишите это

store_in session: "writeable"

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

К вашему сведению: Никогда не проверял с password варианты, но я думаю, это будет работать

Надеюсь это поможет

Для временного доступа к базе данных (например, в сценарии) вы можете использовать драйверы MongoDB Ruby: Учебники - Документация - Документация низкого уровня

Для быстрого обзора:

Подключитесь к базе данных:

client = Mongo::Client.new([ '127.0.0.1:27017' ], :database => 'my_db')

db = client.database

Запрос записей через синтаксис запроса mongoDB:

db['collection_name'].find('field_name' => 'field_value')

Другие вопросы по тегам