我有一个使用 mongoid 连接到 mongodb 的 ruby 脚本。它在我的本地机器上使用无密码的 mongodb 服务器运行良好,但是当我尝试在客户端的服务器上运行它时,他们的 mongodb 需要身份验证,尽管在 mongoid.yml 中连接了正确的 auth 参数,我仍然得到一个错误。
这是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
>