我该如何部署Play!框架应用程序独立(没有战争),不包括应用程序文件夹中的源?

时间:2011-10-21 09:41:03

标签: playframework

我正在使用play-1.2.3。

我已执行以下步骤:

  • 在application.conf
  • 中设置为production
  • 播放预编译myApp
  • 从myApp中删除app目录
  • 播放myApp -Dprecompiled = true

对myApp的第一个请求导致TemplateNotFoundException。这些步骤是否正确?

由于公司限制,我无法部署源代码。如果上述方法不起作用,我可以考虑使用Jetty进行部署。

更新
Stacktrace是:

12:27:53,932 INFO  ~ Starting C:\play-1.2.3\samples-and-tests\chat
12:27:54,008 INFO  ~ Application is precompiled
12:27:54,553 INFO  ~ Application 'chat' is now started !
12:27:54,647 INFO  ~ Listening for HTTP on port 9000 ...
12:28:02,466 ERROR ~

@686d104bp
Internal Server Error (500) for request GET /

Execution exception
NullPointerException occured : null

play.exceptions.JavaExecutionException
    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:229)
    at Invocation.HTTP Request(Play!)
Caused by: java.lang.NullPointerException
    at play.exceptions.TemplateNotFoundException.<init>(TemplateNotFoundException.java:25)
    at play.mvc.Controller.renderTemplate(Controller.java:666)
    at play.mvc.Controller.renderTemplate(Controller.java:639)
    at play.mvc.Controller.render(Controller.java:694)
    at controllers.Application.index(Application.java:14)
    at play.mvc.ActionInvoker.invokeWithContinuation(ActionInvoker.java:546)

    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:500)
    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:476)

    at play.mvc.ActionInvoker.invokeControllerMethod(ActionInvoker.java:471)

    at play.mvc.ActionInvoker.invoke(ActionInvoker.java:159)
    ... 1 more

2 个答案:

答案 0 :(得分:4)

有人在灯塔上报告了这种情况#806 https://play.lighthouseapp.com/projects/57987-play-framework/tickets/806。我做了一些调查,发现在1.2.3中,如果没有模板源,就无法在预编译模式下运行。关于案例#806,我对这个问题做了更广泛的评论。

我还实现了一个修复程序并将其推送到git@github.com上的游戏分区:WiredThing / play.git并且我已经发出拉动请求来玩框架,以防他们想要将其拉入。< / p>

但是,为了重新迭代,在股票播放版本中,可以在预编译模式下删除java源,但是模板源必须存在,即使它从中加载字节码预编译文件。

答案 1 :(得分:4)

它有点像黑客,除了使用一个模板的快速测试之外我还没有验证它,但是一个解决方法似乎是删除模板的内容,以便文件仍然在技术上存在(所以Play是很高兴,但你的模板实际上并没有曝光。