在生产环境中更新playframework应用的最佳工作流程

7

我正在尝试为运行在play框架上的Web应用程序制定最佳工作流程。

我使用start脚本启动它,但是更新代码的最佳实践是什么,以便对用户来说尽可能无缝?

在一个Apache + PHP应用程序中,通常只需将新的*.php文件放置在目录中,在许多情况下,用户甚至不会注意到更改。

你能分享一下你使用play框架进行更新的工作流程吗?


3
您是否阅读了Play文档中的使用Apache作为前置代理来实现应用程序的透明升级一节,或者您不是在寻找这个? - Aerus
当然,这是某种解决方案,但我目前没有使用Apache作为代理。如果这是唯一的选择,并且无法仅使用Play内置服务器完成,则我将选择Apache。 - twowo
@Aerus 很想听到一个真实的部署方案。在生产中使用哪些方案?在哪里构建应用,用什么工具上传到服务器,哪个脚本解压并启动应用程序的第二个实例。Off site 提供了一个手动部署的解决方案。但不是最好的。 - HEX
希望你在此期间已经找到了解决方案。我想一个好的解决方案是构建一个war文件并将你的play应用程序部署到应用服务器上。或者这太过复杂了吗? - s.meissner
我们基本上做的是@Aerus所描述的,只不过我们使用Amazon ELB而不是Apache。我们从ELB中取出一个Play实例,升级应用程序,将其放回ELB,然后再取出下一个Play实例,以此类推。 - Charles O.
显示剩余2条评论
1个回答

0

Play框架与在Apache上使用PHP非常不同。当用户请求页面时,Apache会解释PHP。因此,您只需要更改文件即可更新站点。然而,对于Java(除非您使用.jsp文件,有时甚至不是这样),代码是按字节编译的,Web服务器需要在启动时加载它及其库。这意味着仅替换新编译的文件将无效。您需要重新启动Web容器或使其重新加载应用程序以获取更改。这始终会被任何尝试同时访问站点的用户注意到。

您可以拥有一个Web服务器(不一定是Apache),将其指向当前的Play安装作为代理,并并行启动其新版本,然后将代理Web服务器指向新版本并关闭旧版本。这可能是最简单的方法,可以进行脚本化。

另一种方法是只需拥有一个Web应用程序,将用户重定向到该应用程序并执行类似于上述操作的并行更改。

这两个选项都需要一些设置和编码才能使它们无缝运行。但是,这项工作可能是值得的,因为一旦您设置好了,将来的生产部署变得非常容易。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接