1

我有一个运行良好的 Scala Play 2.3 应用程序,使用在 Heroku 上针对 MongoLab 2.6 数据库运行的 ReactiveMongo,现在 MongoLab 已将他们的沙箱数据库更新到 3.0,我无法启动我的应用程序。

我已将本地数据库更新到 3.0。

我已按照http://reactivemongo.org/releases/0.11/documentation/tutorial/play2.html 2.3 的说明进行操作,但我仍然得到如下堆栈跟踪:

---(从 SBT 运行应用程序,启用自动重新加载)---

[info] play - 在 /0:0:0:0:0:0:0:0:9000 上侦听 HTTP

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

[info] 应用程序 - ReactiveMongoPlugin 正在启动... [info] 应用程序 - ReactiveMongoPlugin 已成功启动 db 'sites'!服务器:[localhost:27017] [info] play - 应用程序已启动(开发)[ERROR] [10/02/2015 11:34:11.472] [play-akka.actor.default-dispatcher-7] [ActorSystem(play) ] 来自线程 [play-akka.actor.default-dispatcher-7] 的未捕获错误正在关闭 JVM,因为在 akka.actor.ActorCell.receiveMessage 处启用了“akka.jvm-exit-on-fatal-error” java.lang.AbstractMethodError (ActorCell.scala:516) atakka.actor.ActorCell.invoke(ActorCell.scala:487) atakka.dispatch.Mailbox.processMailbox(Mailbox.scala:238) atakka.dispatch.Mailbox.run(Mailbox.scala: 220) 在 akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.

[错误] [10/02/2015 11:34:11.473] [play-akka.actor.default-dispatcher-8] [ActorSystem(play)] 来自线程 [play-akka.actor.default-dispatcher-8 的未捕获错误] 由于启用了“akka.jvm-exit-on-fatal-error”而关闭 JVM -exit-on-fatal-error' 在 akka.actor.ActorCell.invoke(ActorCell.scala:487) 的 akka.actor.ActorCell.receiveMessage(ActorCell.scala:516) 为 ActorSystem[play] java.lang.AbstractMethodError 启用) at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:238) at akka.dispatch.Mailbox.run(Mailbox.scala:220) at akka.dispatch.ForkJoinExecutorConfigurator$AkkaForkJoinTask.exec(AbstractDispatcher.scala:393) at scala .concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260) at akka.actor.ActorCell.create(ActorCell.scala:580) at scala.concurrent.forkjoin.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1339) at scala .concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456) at akka .actor.ActorCell.systemInvoke(ActorCell.scala:478)concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456) at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) at akka.actor.ActorCell.invokeAll$1(ActorCell.scala:456) at akka.actor.ActorCell.systemInvoke(ActorCell.scala:478)

我已将我的引用从 ...default.BSONCollection 更新为 ...bson.BSONCollection 等。

我正在使用以下配置:

mongodb.uri = "mongodb://localhost:27017/sites" 

mongo-async-driver {   

  akka {

    loglevel = WARNING   

  } 

}

我的应用程序依赖项是:

"org.reactivemongo" %% "play2-reactivemongo" % "0.11.7.play23")

请有人可以就上述堆栈跟踪的实际含义提出建议,因为我无法弄清楚?

4

1 回答 1

1

不完全确定您的堆栈跟踪中发生了什么,但看起来该设置akka.jvm-exit-on-fatal-error只是导致您的应用程序崩溃而不是输出导致崩溃的原因

通读文档,您可能可以通过执行以下操作来禁用它:

jvm-exit-on-fatal-error = off

在你的 akka 配置中。然后你可能会得到一些更详细的堆栈跟踪

http://doc.akka.io/docs/akka/snapshot/general/configuration.html

但是,在 MongoLab 上升级 Mongo 3.0 后,我也遇到了一个致命错误。我的错误是这样的:

DatabaseException['not authorized for query on auth-test.user' (code = 13)]

由 3.0 使用与 2.6 不同的身份验证引起

mongo 2.6 使用 MONGODB-CR auth 协议,3.0 默认使用 MONGODB-SHA-1

为了解决这个问题,我将 MongoURI 更改为包含 authMode,如下所示:

mongodb.uri = "mongodb://user:password@ds049621.mongolab.com:49431/DBName?authMode=scram-sha1"
于 2015-10-02T13:08:00.777 回答