如何运行同一个Play的两个实例!框架申请?

Pet*_*ter 4 playframework playframework-2.1

我正在尝试运行同一个Play应用程序的两个实例,以便将来透明地升级应用程序.

当我启动第一个实例时,一切都很顺利.当我启动start 9525命令以在端口9525上启动应用程序的第二个实例时,我收到以下错误:

Play server process ID is 8909
This application is already running (Or delete .../RUNNING_PID file)
Run Code Online (Sandbox Code Playgroud)

知道如何解决这个问题吗?

bie*_*ior 6

这个Play的文档已经描述了使用Apache进行" 透明升级 ".通常,您需要在两个单独的文件夹中启动两个实例

一开始:

  1. dist使用应用来源在您的文件夹中创建包
  2. 将其解压缩到某个子文件夹即. instance1
  3. instance1所需的端口开始,例如9998,它将是您的每日实例

更改后,当您想要透明地重新部署应用程序时:

  1. 将更改推送到服务器(假设您正在使用某些版本控制系统,即.git)
  2. 创建dist并解压缩到其他文件夹即.instance2
  3. 另一个端口启动它,即.9999
  4. 停止应用程序在文件夹 instance1
  5. 将unzipped dist复制instance2instance1
  6. 启动应用程序instance1并停止应用程序instance2
  7. 每次需要重新部署新更改时,请重复此过程.

当然,创建简单的shell脚本将立即执行所有步骤将是您的好帮手.

小费:

为了避免经常重新部署,特别是当您只需要替换/修改CSS或图像等公共静态内容时,您也可以使用Apache common vhost来处理这些资源.只需vhost为某个文件夹创建一个子域即ie.http://static.domain.tld或者更好地使用单独的域:http://my-cdn.tld所以你可以使用如下路径:

<img src="http://static.domain.tld/images/photo.png" alt="" />
Run Code Online (Sandbox Code Playgroud)

代替

<img src="/public/images/photo.png" alt="" />
Run Code Online (Sandbox Code Playgroud)

好处:

  • 您无需重新部署应用程序即可更改这些文件.
  • 您不发送cookie,这些cookie通常是公共资产的冗余(如果vhost的域不是主项目)
  • 您可以使用HTTP服务器的配置来设置缓存标记(性能!)
  • 您将在所有实例之间自动共享静态.
  • 你不会浪费JVM资源来提供图片:)我注意到,虽然Play的默认服务器可以非常快,但使用简单的HTTP服务器提供静态内容可能更快......

最后,根据我的经验,nginx比Apache快.因此,如果您的案例中只有HTTP服务器的任务是对Play的应用程序进行负载平衡,请考虑使用nginx,它只是更轻松.