将ReactiveMongo Play 2.3应用程序从2.6升级到3.0

时间:2015-10-02 10:48:26

标签: scala heroku playframework mlab play-reactivemongo

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

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

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

  

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

     

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

     

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

     

[info]应用程序 - ReactiveMongoPlugin启动... [info]   application - ReactiveMongoPlugin已成功启动db   “网站”!服务器:                   [localhost:27017] [info] play - 应用程序启动(开发)[ERROR] [2015年2月2日11:34:11.472]   [play-akka.actor.default-dispatcher-7] [ActorSystem(play)] Uncaught   线程[play-akka.actor.default-dispatcher-7]关闭时发生错误   自启用'akka.jvm-exit-on-fatal-error'以来的JVM   java.lang.AbstractMethodError           at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)           at akka.actor.ActorCell.invoke(ActorCell.scala:487)           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)           在scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)           在scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339)           在scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)           在scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107)

     

[错误] [10/02/2015 11:34:11.473]   [play-akka.actor.default-dispatcher-8] [ActorSystem(play)] Uncaught   线程错误[play-akka.actor.default-dispatcher-8]关闭   自启用'akka.jvm-exit-on-fatal-error'以来的JVM   java.lang.AbstractMethodError来自线程的未捕获错误   [play-akka.actor.default-dispatcher-7]自此关闭JVM   为ActorSystem启用'akka.jvm-exit-on-fatal-error'[play]   java.lang.AbstractMethodError           at akka.actor.ActorCell.receiveMessage(ActorCell.scala:516)           at akka.actor.ActorCell.invoke(ActorCell.scala:487)           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)           在scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask.java:260)           at akka.actor.ActorCell.create(ActorCell.scala:580)           在scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339)           在scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979)           在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)

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

我正在使用以下配置:

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

mongo-async-driver {   

  akka {

    loglevel = WARNING   

  } 

}

我的应用依赖是:

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

请有人建议上面的堆栈跟踪实际意味着什么,因为我无法弄明白吗?

1 个答案:

答案 0 :(得分: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"