Rails Mongoid无法进行身份validation – 失败,错误13:“未授权查询my_db.my_collection”

据说这个问题已解决了最新版本的轻便摩托车但仍然在我身上发生。 我有一个带有Mongoid的rails 4.2应用程序,为具有readWritedbOwner角色的MongoDB DB创建了一个用户,并在mong.conf文件中设置了auth = true
我可以使用Mongo shell或使用Mongo驱动程序的简单Java应用程序使用该用户凭据在DB上执行任何操作。
但是,当尝试使用Mongoid进行身份validation时,我总是会收到此错误:

失败,错误13:“未授权查询my_db.my_collection”

这是我的mongoid.yml文件的相关部分:

production: # Configure available database sessions. (required) sessions: # Defines the default session. (required) default: # Defines the name of the default database that Mongoid can connect to. # (required). database: my_db hosts: - localhost:27017 username: my_username password: my_password 

我也尝试用服务器的远程地址替换主机并远程访问它(这与禁用的身份validation选项一起使用)没有成功。 为了它的价值,我可以通过调试mpped / node.rb文件看到凭证,在ensure_connected方法中我看到@credentials变量包含我的用户名和密码我在这里缺少什么? 谢谢!

也遇到这个问题。 我愿意猜你是在运行MongoDB 3+吗?

坏消息: Moped 2(今天由mongoid使用)不支持MongoDB 3+的身份validation。

Moped还缺乏支持服务器版本3.0的许多基本function。 例如,它根本不支持使用MongoDB 3.0或最新版本的有线协议进行身份validation(其中包括listCollections,listIndexes等命令以及执行批量写入的function)。 将Mongoid与Ruby驱动程序2.0集成将为ODM带来许多此function和向前兼容性。 资源

好消息:目前正在进行重大改写(Mongoid 5),将由MongoDB团队提供支持。 今天你可以从大师那里拿出来测试一下……但我不建议生产,因为它非常不稳定。

解决方案选项

  1. 从MongoDB和任何公共DNS删除用户/通过身份validation到数据库。 将SSH与私钥一起使用并连接到私有地址。
  2. 降级到MongoDB 2.x.
  3. 使用Mongoid 5