【问题标题】:What are the differences between Play run and start?Play run 和 start 有什么区别?
【发布时间】:2013-08-13 15:38:04
【问题描述】:

我想在以下问题的上下文中了解 running play start 和 play run 之间的区别。

我的具体用例相当复杂,但我会这样简化:

  • 在启动时(作为 Global.scala 的一部分),我的 Play 应用程序正在对 Java 应用程序 X 的入口点进行直接方法调用。
  • 作为其初始化的一部分,X 启动 Tomcat 的嵌入式实例。
  • 在 X 的初始化结束时,它会验证 Tomcat 是否已启动并响应请求。

现在,当我在此应用程序上执行play start 时,Tomcat 已启动并运行,X 很高兴,生活还在继续。

但是,当我执行play run 时,Tomcat 无法初始化,X 坐在那里等待响应,最终超时。

我需要使用play run 的主要原因是为了开发,因为我想通过运行play debug run 来附加Eclipse 调试器。

我意识到这过于简单化了,但我希望从您那里得到的是导致 Play run 和 Play start 之间的差异,这可能会影响我的应用程序的行为,从而导致此失败。

现在,我尝试在 http://www.playframework.com/documentation/2.1.x/ThreadPools 之后增加 Play 的默认线程池中的线程数,但没有成功。

播放输出和日志没有给我关于这个问题的有用信息。

我正在使用 Play 2.1.1

【问题讨论】:

    标签: playframework playframework-2.1


    【解决方案1】:
    • play run开发模式启动播放应用程序。

      这意味着它在播放提示中运行(实际上是在 SBT 中),具有一些自定义类加载器的魔法,允许自动重新加载类、自动编译模板等。这种运行应用程序的自定义方式可能是什么阻止 Tomcat 启动。

      没有来自 Tomcat 的一些日志输出或堆栈跟踪,很难说更多关于 Tomcat 不启动的原因。这有点类似于在另一个容器中启动 Tomcat,该容器通过自定义类加载器(如...Tomcat)提供隔离。

      编辑:我自己不知道血腥细节,但这一切都发生在the play run commandreloader。 master 中好像是more documented,虽然我不知道2.1.x 和2.2.x 之间有没有变化。

    • play start 是一种在生产模式下运行应用程序的交互式方式。

      这意味着它与对java -cp [...] YourMainClass 的调用完全相同,只是它从播放提示中交互式运行(需要Ctrl+D 分离)而不是在后台(因此它不适合自动部署) .

    但是对于实际生产,您应该使用play dist 命令准备一个独立版本,然后按照in the documentation 的描述使用包含的脚本启动它。

    【讨论】:

    • 谢谢@gourlaysama,这很有帮助,我想深入挖掘 sbt 中发生的魔法。您提到了类加载器,也许这就是问题所在。你知道我在哪里可以找到有关此的更多详细信息吗?就像我提到的,Tomcat 日志似乎没有提供任何有用的细节,但我们不能排除它以某种方式静默失败。
    • 我不知道这是否记录在任何地方(源本身之外)...我添加了指向发生魔法的地方的链接,请参阅编辑。
    猜你喜欢
    • 1970-01-01
    • 2012-01-24
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-11-22
    • 2015-07-11
    相关资源
    最近更新 更多