【问题标题】:Scala Play Framework application doesn't restart properly after changing sourcesScala Play Framework 应用程序在更改源后无法正确重启
【发布时间】:2013-11-22 00:08:00
【问题描述】:

我有一个用 Scala 编写的 Play 2.2 应用程序,它可以正常启动和运行(使用 play run)。然而,最近发现源文件更改后,它开始无法正确重新启动

该应用程序用于在检测到源文件发生更改时自动重建和重新启动。 Play 仍会检测到源更改并尝试重新启动服务器,但它只会停止它 - 它没有正确重新启动。

这是play run 在控制台中的样子:

[info] Loading project definition from <path>
[info] Set current project to GTF (in build file:<path>)

--- (Running the application from SBT, auto-reloading is enabled) ---

[info] play - Listening for HTTP on /0:0:0:0:0:0:0:0:9000

(Server started, use Ctrl+D to stop and go back to the console...)

[info] play - database [default] connected at jdbc:mysql://localhost/mydb
[info] application - START
[info] play - Starting application default Akka system.
[info] play - Application started (Dev)

到目前为止,一切都很好。此时应用程序已启动并正常运行。但是,如果我更改源文件并刷新页面,控制台中会显示以下内容:

[info] Compiling 1 Scala source to <path>...

--- (RELOAD) ---

[info] application - STOP
[info] play - Shutdown application default Akka system.

就是这样。它似乎可以编译/构建,但它永远不会到达application - START。浏览器窗口只是坐在那里永久加载页面。

我试过play cleanplay clean-all,但这并没有解决问题。我还尝试使用 tilda 运行应用程序,如下所示:play ~run (this was suggested elsewhere),但这也不起作用。有任何想法吗?同样,这非常令人费解,因为它曾经正常工作。这个问题使开发变得相当烦人,因为每次更改任何源文件时我都必须手动重新启动服务器。谢谢。

【问题讨论】:

  • 我认为是您的代码记录了开始/停止。不要记录 STOP,而是尝试 new Exception().printStackTrace()。这将转储当前线程堆栈,这可能会更清楚。无论如何,我怀疑有些东西正在调用 System.exit,也许是 Akka(它喜欢在捕获异常时这样做)。可能是类加载问题。检查 logs/application.log 以查看是否更能说明问题。
  • 我认为你是对的......这与 Akka 有关,因为在启动时消除我的 Akka.system.scheduler.schedule 调用可以消除问题。不过,它一开始就正确启动仍然很奇怪。我无法从堆栈跟踪中获得任何特别有用的信息……日志中也没有任何内容。我会继续努力的,谢谢。
  • 您可以尝试在 java.lang.System.exit 中设置一个断点来查看调用它的原因。

标签: scala playframework playframework-2.0


【解决方案1】:

你不应该使用“play ~run”吗? Play 应用程序不需要重新启动来编译和应用您的更改。

【讨论】:

  • 我认为您错过了我的问题中我说的部分:“我也尝试使用 tilda 运行应用程序,如下所示:play ~run,但这也不起作用。”
猜你喜欢
  • 2018-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-04
  • 1970-01-01
  • 2013-10-13
  • 2017-06-17
相关资源
最近更新 更多