4

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

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

Play server process ID is 8909
This application is already running (Or delete .../RUNNING_PID file)

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

4

1 回答 1

6

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

开头:

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

更改后,当您想以透明方式重新部署应用程序时:

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

当然,创建将同时执行所有步骤的简单 shell 脚本将是您的好帮手。

提示:

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

<img src="http://static.domain.tld/images/photo.png" alt="" />

代替

<img src="/public/images/photo.png" alt="" />

好处:

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

最后,根据我的经验,nginx 比 Apache 快。因此,如果在您的情况下 HTTP 服务器的唯一任务是负载平衡 Play 的应用程序,请考虑使用 nginx,它只是更轻。

于 2013-04-01T17:59:56.617 回答