2013-06-19 65 views
1

我有一個使用mongoid連接到mongodb的ruby腳本。它可以在我的本地機器上使用無密碼的mongodb服務器正常工作,但是當我嘗試在客戶機的服務器上運行它時,它們的mongodb需要身份驗證,並且儘管與mongoid.yml中的正確auth參數關聯,但我仍然可以一個錯誤。可以通過shell連接到mongodb,但不能通過mongoid

這是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/[email protected]/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的外殼:

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

你的確切代碼片段對我來說工作得很好。上面的查詢失敗連接到另一個數據庫,也許你的用戶也無法訪問(例如dbname.items_collection)?或者這個集合是否存在於您正在驗證的相同數據庫中? –

回答

相關問題