可以通过shell连接到mongodb,但不能通过mongoid连接到mongodb

时间:2013-06-19 21:24:03

标签: mongodb authentication mongoid

我有一个使用mongoid连接到mongodb的ruby脚本。它在我的本地计算机上使用无密码mongodb服务器正常工作,但是当我尝试在客户端的服务器上运行它时,他们的mongodb需要身份验证,尽管在mongoid.yml中连接了正确的auth params,我仍然得到错误。

这是mongoid.yml文件

development:
  sessions:
    default:
      database: dbname
      user: root
      password: secret
      hosts:
        - localhost:27017
      options:
        safe: true

我在Ruby中加载它是这样的:

require 'mongoid'
Mongoid.load!("/path/to/mongoid.yml", :development)

这是我运行脚本时遇到的错误。请注意,错误实际上不是在加载yml文件时触发的,而是在我尝试在下面几行发出我的第一个Mongoid查询时。

/home/username/.rvm/gems/ruby-1.9.3-p429@gemsetname/gems/moped-1.5.0/lib/moped/node.rb:382:in `block in query': The operation: #<Moped::Protocol::Query (Moped::Errors::QueryFailure)
  @length=153
  @request_id=2
  @response_to=0
  @op_code=2004
  @flags=[:slave_ok]
  @full_collection_name="dbname.items_collection"
  @skip=0
  @limit=-1
  @selector={"$query"=>{"detected_on"=>2013-06-19 00:00:00 UTC, "url"=>"http://www.example.com/"}, "$orderby"=>{:_id=>1}}
  @fields=nil>
failed with error 10057: "unauthorized db:dbname ns:dbname.items_collection lock type:0 client:127.0.0.1"

作为最后一点,yml文件中的用户名和密码都很好,因为我完全可以用它们连接到我的mongodb shell:

$ mongo dbname -u root -p 'secret'
MongoDB shell version: 2.2.3
connecting to: dbname
> show collections
system.indexes
system.users
>

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,我认为这是因为你必须指定认证数据库 试着看看这个:https://docs.mongodb.org/ecosystem/tutorial/ruby-mongoid-tutorial/#anatomy-of-a-mongoid-config