2014-12-13 110 views
2

我剛開始使用Elixir,所以我想我在這裏有一些基本的誤解。下面是代碼...使用elixir-mongo的Mongodb身份驗證

defmodule Mdb do 
    def connect(collection, this_db \\ "db-test") do 
    {:ok, mongo} = Mongo.connect("db-test.some-mongo-server.com", 12345) 
    db = mongo |> Mongo.db(this_db) 
    db |> Mongo.auth("user", "secretpassword") 
    db 
end 

end

我開始iex -S mix ,當我嘗試db = Mdb.connect("users")我得到

** (UndefinedFunctionError) undefined function: Mongo.auth/3 Mongo.auth(%Mongo.Db{auth: nil, mongo: %Mongo.Server{host: 'db-test.some-mongo-server.com', id_prefix: 12641, mode: :passive, opts: %{}, port: 12345, socket: #Port<0.5732>, timeout: 6000}, name: "db-stage", opts: %{mode: :passive, timeout: 6000}}, "user", "secretpassword") (mdb_play) lib/mdb.ex:7: Mdb.connect/2

我貌似Mongo.auth/3未定義,但這對我來說毫無意義。任何人都可以指出我的錯誤嗎? 感謝您的幫助

+2

不知道這個問題,但要注意函數的最後兩行:我從來沒有使用過'Mongo'庫,但我敢肯定,這樣做'DB |> Mongo.auth (...)'而不將結果分配給任何東西都毫無意義。通常在Elixir中,'Mongo.auth(db,...)'將返回一個DB的新的* authenticated *實例。不要將'db |> Mongo.auth(...)'與'必要的''db.auth()':)混淆。 – whatyouhide 2014-12-13 19:12:18

回答

3

我剛剛玩過它,並面臨同樣的錯誤。如在錯誤消息中,Mongo.auth似乎沒有定義,它可能是Mongo.Db.auth。但是,我也遇到了另一個錯誤(ArgumentError)Mongo.Db.auth。這可能是圖書館的某個問題。

** (ArgumentError) argument error 
      :erlang.byte_size 
... 
    (mongo) lib/mongo_request.ex:43: Mongo.Request.cmd/3 
    (mongo) lib/mongo_db.ex:44: Mongo.Db.auth/1 

我不熟悉的圖書館,但之後Mongo.Db.auth小的變化,正常通話似乎開始工作。

我嘗試了以下順序。

mongo = Mongo.connect!(server, port) 
db = mongo |> Mongo.db(db_name) 
db |> Mongo.Db.auth(user_name, password) 
collection = db |> Mongo.Db.collection(collection_name) 
collection |> Mongo.Collection.count() 

我試過的改變是在下面的fork-repo中。

https://github.com/parroty/elixir-mongo

+0

啊,我得到了我最初的錯誤。謝謝。現在研究你的改變。 – Paul 2014-12-15 14:00:45

+0

我在叉子(frpaulas/elixir-mongo)上做了一些更改,使Mongo.Db.auth更加一致w/checkiz/elixir-mongo - 我認爲 – Paul 2014-12-31 16:31:35