3

我正在尝试开始使用 playframework 中的 salat 插件。我已经在其中配置了数据库,application.conf并将所有依赖项添加到文件中Build.scala,并将 salat 添加到play.plugins文件中。我实际上还没有在项目中添加任何代码,我只是按照 github 页面上的说明进行操作,然后尝试运行该项目。我收到以下错误消息

(服务器已启动,使用 Ctrl+D 停止并返回控制台...)

[info] play - mongodb [default] 连接到 heroku_app4620908@ds031907.mongolab.com:31907/heroku_app4620908
[错误] 应用程序 -

!@6bchnaacn - 内部服务器错误,请求 [GET /] ->

play.api.Configuration$$anon$1:配置错误[无法连接到[ds031907.mongolab.com/107.21.153.211:31907]]
    在 play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:71) ~[play_2.9.1-2.0.3.jar:2.0.3]
    在 play.api.Configuration.reportError(Configuration.scala:258) ~[play_2.9.1-2.0.3.jar:2.0.3]
    在 se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:105) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    在 se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:98) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    在 scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.3]
    在 scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:194) ~[scala-library.jar:0.11.3]
引起:com.mongodb.CommandResult$CommandFailure:命令失败[listDatabases]:{“serverUsed”:“db-uri”,“errmsg”:“需要登录”,“ok”:0.0}
    在 com.mongodb.CommandResult.getException(CommandResult.java:88) ~[mongo-java-driver-2.8.0.jar:na
    在 com.mongodb.CommandResult.throwOnError(CommandResult.java:134) ~[mongo-java-driver-2.8.0.jar:na]
    在 com.mongodb.Mongo.getDatabaseNames(Mongo.java:356) ~[mongo-java-driver-2.8.0.jar:na]
    在 com.mongodb.casbah.MongoConnection.getDatabaseNames(MongoConnection.scala:190) ~[casbah-core_2.9.1-2.4.1.jar:2.4.1]
    在 se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:103) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]
    在 se.radley.plugin.salat.SalatPlugin$$anonfun$onStart$1.apply(SalatPlugin.scala:98) ~[play-plugins-salat_2.9.1-1.0.8.jar:1.0.8]

我很困惑,因为我将密码和所有内容都添加到了 conf 文件中。从日志看来,任何试图为我连接到数据库的东西都没有使用我提供的信息先登录。

4

4 回答 4

6

正如你所说,看起来根本问题是 MongoDB 拒绝了命令“listDatabases”。此命令需要管理员访问MongoDB 进程,因为它会显示有关托管在那里的其他数据库的信息。

不幸的是,它返回的消息“需要登录”有点误导。您已登录!您只是无权列出数据库。

这是一个简单的实验,您可以自己尝试使用 MongoDB shell。看到“show dbs”失败并显示您在应用程序中收到的相同错误消息,但是“show collections”(不需要访问您自己以外的任何其他数据库)成功了吗?

% mongo ds031907.mongolab.com:31907/heroku_app4620908 -u heroku_app4620908 -p your_password
MongoDB shell version: 2.0.7
connecting to: ds031907.mongolab.com:31907/heroku_app4620908
> show dbs
Fri Aug 17 13:12:10 uncaught exception: listDatabases failed:{ "errmsg" : "need to login", "ok" : 0 }
> show collections
system.indexes
system.users

(注意:我使用自己的 MongoLab 帐户进行了此操作,并在此处复制和粘贴时修改了文本,因此您可以将其复制到终端中。)

有没有办法避免调用 listDatabases ?我不熟悉您使用的框架。

于 2012-08-17T19:59:51.953 回答
2

我也有这个问题...

它应该带有请求所有数据库名称的 SalatPlugin 的 onStart 方法:source._2.connection.getDatabaseNames().

这段代码只是测试服务器的活跃度......

我要和 leon 核对一下我们怎么能做到这一点!可悲的是,在解决此问题之前,您将无法连接!

请继续关注这个问题https://github.com/leon/play-salat/issues/23

于 2012-08-18T16:41:19.457 回答
0

这在最新版本的 play-salat 中已修复,现在它使用 getCollectionNames 代替

于 2012-09-07T08:57:50.197 回答
0

使用管理员

db.addUser('userName', 'userPassword')

db.auth('用户名', '用户密码')

显示数据库

爪哇:

DB db = mongo.getDB("YouDBName") ;

db.authenticate("userName", "userPassword".toCharArray()) ;

System.out.println(mongo.getDatabaseNames()) ;

于 2013-10-21T03:33:31.530 回答