最好的Playframework 1.x部署策略是什么?

最好的Playframework 1.x部署策略是什么?,playframework,Playframework,我已经开发了一个基于Play框架的小应用程序(我还在学习)。现在我需要把它捆起来装运。一种方法是创建一个war文件,并将其部署在一个servlet容器(如tomcat)中,这在文档中非常清楚。另一个选项是使用内置的http服务器。这是我想做的,因为这是推荐的方法 现在,我如何从我的开发应用程序中提取应用程序,以便将其部署到生产服务器中?我的意思是,我如何编译并生成一个包,该包可以分发给我的客户机,客户机将执行诸如解压缩分发包并运行脚本来启动服务器之类的操作 或者我这样说,我是否需要在我的生产服务

我已经开发了一个基于Play框架的小应用程序(我还在学习)。现在我需要把它捆起来装运。一种方法是创建一个war文件,并将其部署在一个servlet容器(如tomcat)中,这在文档中非常清楚。另一个选项是使用内置的http服务器。这是我想做的,因为这是推荐的方法

现在,我如何从我的开发应用程序中提取应用程序,以便将其部署到生产服务器中?我的意思是,我如何编译并生成一个包,该包可以分发给我的客户机,客户机将执行诸如解压缩分发包并运行脚本来启动服务器之类的操作

或者我这样说,我是否需要在我的生产服务器上设置播放路径,然后将我的项目文件复制到生产服务器,以便我的用户可以像我在开发环境中所做的那样使用播放运行来运行它


文件上只说我需要切换到生产模式

如果您不想构建war文件,您肯定需要在您的环境变量中使用play,因为在生产服务器上运行它需要“play start MYAPP”(启动应用程序并将其放入后台进程)。如果没有框架本身,应用程序不会独立运行

我的意思是如何编译和生成 可以分发到我的 客户会做类似的事情 解压缩分发停车场并运行 启动服务器的脚本


这正是战争档案的目的。如果您想要自动部署,那么没有办法绕过war文件。另一方面,在构建war文件时,您不需要生产服务器上的框架。您可以使用play war来处理这场战争,并使用maven tomcat插件将其分发到您的生产服务器(如果是tomcat)。

让我来解决一些问题。并非必然错误,但肯定不准确:


您确实需要在您的环境变量中发挥作用

不,您不需要。Play是一个包含大量脚本的文件夹。所有播放需要安装Java并定义Java_HOME。我甚至认为,您可以通过命令行定义Java。您可以使用无环境变量的绝对路径调用play。例如,您甚至可以在应用程序中交付框架

如果您想要自动部署,就没有办法绕过WAR文件

不正确。我通过Hudson/Jenkins为我的所有游戏应用程序使用自动部署,我不使用WARs。Play应用程序只不过是一个包含Java源代码和配置文件的文件夹。您可以将它们打包为ZIP/TAR/RAR/任何您想要的格式,并使用脚本运行/安装它们

另一方面,在构建WAR文件时,您不需要生产服务器上的框架

不正确,因为
play war
命令实际上在战争中捆绑了整个框架。因此,您仍然拥有它,只是它包含在您的WAR中,而不是安装在您的服务器上

此外,如前所述,play的最佳部署策略是使用其独立的jetty配置。IMHO、Tomcat应作为最后手段使用,并且/或者只有在有正当理由的情况下才使用

编辑:参考文件建议仅在特定情况下使用独立Jetty(作为Tomcat的替代品)。如果这是您的一个选项,那么最好的部署策略就是与Play捆绑在一起的同一个HTTP服务器!(它是基于)。为什么?它不使用Servlet API,因此没有-这允许播放!要使用异步IO(Play!continuations)执行一些巧妙的操作,请参阅以获取详细信息


注意:尽管Jetty/Tomcat也支持异步IO,但它们通过自己的专有API支持异步IO—如果您打包您的游戏!作为WAR,它不会利用这些API。因此,如果你打包了你的应用程序,你就要准备好在服务器上看到大量闲置的线程。异步IO是用ServletAPI3.0和Play标准化的!2.0将利用这一点。同时,您最好的选择是坚持使用内置服务器。

谢谢您的回答。利用战争是明智的吗?war文件中有关于每个请求限制一个线程的内容。war文件是否与play框架中的一样好?另外,如果我决定将play框架与我的应用程序一起部署,我如何删除源代码,以便只分发已编译的类?我在Glassfish应用服务器上有一个小应用程序,运行稳定。这里的交通不多,所以我说不出它的性能有多好。Guillaume在邮件列表中提到,建议使用Play应用程序。您不必删除源代码。重新部署将为您完成这项工作。@joshua如果您不想分发源文件,这样您的代码就不会受到客户端的保护,答案是1)复制您的应用程序,2)使用“play precompile MYAPP”编译所有源代码,然后3)您可以删除源代码文件夹。你的应用现在可以发布了!显然,不要从原始代码中删除源代码,除非您在其他地方备份了源代码!在servlet容器中部署play应用程序有什么问题?速度有些功能不起作用?实际的问题是什么?首先,servlet容器加载了很多Play不需要的组件,造成了内存过载。其次,为了在服务器容器中部署play-on,您需要构建war。在转换过程中可能会发生错误(特别是在依赖模块、外部JAR、LIB时)。另一个要冒的风险。性能也是一个问题。servlet容器将执行附加处理。一个轻量级的容器,比如内置的码头就足够了。有很多原因,这是最重要的。但好处是你可以使用