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

时间:2013-04-01 17:37:59

标签: playframework playframework-2.1

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

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

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

任何想法如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

This Play's doc已经描述了使用Apache进行“透明升级”。通常,您需要在两个单独的文件夹

中启动两个实例

一开始:

  1. 使用应用来源
  2. 在您的文件夹中创建dist个包
  3. 将其解压缩到某个子文件夹即。 instance1
  4. 在所需端口上启动instance1以获取示例9998它将是您的每天实例
  5. 更改后,当您想要透视地重新部署应用程序时:

    1. 将更改推送到服务器(假设您正在使用某些版本控制系统,即.git)
    2. 创建dist并将其解压缩到其他文件夹即。 instance2
    3. 其他端口启动它,即。 9999
    4. 停止文件夹instance1
    5. 中的应用程序
    6. 将解压缩的广告从instance2复制到instance1
    7. instance1中启动应用程序并停止instance2
    8. 上的应用程序
    9. 每次需要重新部署新更改时,请重复此过程。
    10. 当然,创建简单的shell脚本会立即执行所有步骤,这对您来说非常有帮助。

      提示

      为避免经常重新部署,尤其是当您只需要替换/修改某些公共静态内容(如CSS或图片)时,您也可以使用Apache common { {1}}用于处理这些资源。只需为某个文件夹创建vhost作为子域即ie。 vhost或更好地使用单独的域:http://static.domain.tld,因此您可以使用如下路径:

      http://my-cdn.tld

      而不是

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

      好处:

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

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