3

我有两个数据库,我必须在我的应用程序中使用。我在我的mongoid.yml如下:连接到两个数据库Mongoid

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" 

我试过在线搜索,但无法获得任何解决方案。任何帮助,将不胜感激。提前致谢。

回答

12

嗯以及可你这样做看起来像你搞砸你的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 

FYI决不password的选择,但我测试猜它会工作

希望这个帮助

+0

它的作品就像一个魅力。谢谢。 +1! – senthil 2013-05-07 06:45:01

+0

感谢您的回答 我说的“localhost:27017”,而不是“myserverip:27017” 和“store_in数据库:‘db2_name’”,而不是“在会话存储:‘写’” 和它的工作对我来说 – 2017-09-16 08:47:36