使用elixir-mongo进行Mongodb身份验证

时间:2014-12-13 14:37:00

标签: mongodb elixir

我刚刚开始使用Elixir,所以我觉得我在这里有一些基本的误解。这是代码......

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未定义,但这对我没有意义。任何人都能指出我的错误吗? 谢谢你的帮助

1 个答案:

答案 0 :(得分:3)

我只是在玩它,并面临同样的错误。如错误消息中所示,Mongo.auth似乎未定义,而可能是Mongo.Db.auth。但是,我在Mongo.Db.auth上遇到了另一个错误(ArgumentError)。这可能是图书馆中的某些问题。

** (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

相关问题