【问题标题】:Managing multiple applications developed in Play framework管理在 Play 框架中开发的多个应用程序
【发布时间】:2012-09-09 01:09:47
【问题描述】:

我们有各种使用 PHP 和 Java 开发的应用程序。我们正在使用 apache 和 tomcat。因此,当我们重新启动系统时,一旦 apache 启动,PHP 应用程序就会启动,而一旦 tomcat 启动,Java 应用程序就会启动。我不确定在 Play 框架中处理这个问题的最佳方法是什么(假设我们有 10 多个 Play 应用程序)。当然,单独启动每个应用程序并不是正确的解决方案。我们可以编写一些启动脚本,在重启后启动每个应用程序。但我很想知道使用 ROR 和 Django 等其他类似框架的开发人员如何处理这种情况。有什么工具可以做到这一点吗?有什么工具可以用于 Play 应用程序?

【问题讨论】:

    标签: playframework


    【解决方案1】:

    部署 WAR 包有一些缺点,我无法讨论性能,但正如您在 WAR plugin 的兼容性矩阵中看到的那样,仍然有一些不受支持的功能。所以 WAR 应该被视为最后一个选项(如果没有其他可用)

    目前我有相同的设置,PHP 站点通过 Apache + 独立 Play 应用程序工作。当然,所有这些都需要在默认 Web 端口 (80) 上的自定义域/子域上可用。

    一般来说:我们在专用 IP 上部署应用程序,该 IP 在前端由nginx 服务器控制,用于代理目的和负载平衡。多亏了这一点,我们甚至可以在服务器上以开发模式启动应用程序,并且它将在其域中可用。当然,如果您没有额外的 IP,您也可以使用 Apache 作为代理,但据我所知,nginxlighthttpd 对于此任务来说要快得多。

    您可以在Set-up a front-end server 文档中找到更多详细信息。

    现在,使用一些简单的 bash 脚本和 git 钩子,您可以在远程机器上准备和部署您的应用程序,而无需重新发送整个包(对于小型应用程序,其大小约为 50mb)。就像 Heroku 部署一样,您应该只将应用程序的代码推送到您的服务器,然后使用钩子和脚本应该准备 dist 包(more about dist)并在某个定义的端口上运行它,这些端口将通过前面提到的代理可用。

    当然,通过 Play 的控制台启动应用程序在生产环境中是不必要的内存浪费。

    有关于如何在服务器启动时启动Play应用程序的示例,因此您可能会根据您的机器找到一些提示。

    据我所知,这是目前最理想的方案

    【讨论】:

      【解决方案2】:

      如果您在 Ubuntu 上托管,最好为每个应用程序插入一个 init 脚本 (this is a decent start),这样它们就可以启动机器。

      或者https://github.com/dlecan/play2-war-plugin 看起来可以让您将 Play 2 应用程序发送到您可以在 Tomcat 中部署的 WAR 文件:Play 2 系列中对 WAR 部署的核心支持不会在 2.1 之前出现,因此您可能不会能够让它发挥作用。 Play 1 原生支持它:去吧

      play war myapp -o myapp.war
      

      【讨论】:

      • 感谢您的 cmets。我知道战争解决方案。但 Play 框架开发人员建议使用内置服务器以获得更好的性能。初始化脚本是另一种解决方案(我在我的帖子中也提到过)。但我仍然觉得必须有更好的方法。这就是为什么我想知道它在 ROR 或 Django 世界中是如何完成的。
      猜你喜欢
      • 1970-01-01
      • 2011-03-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 1970-01-01
      • 2018-02-06
      相关资源
      最近更新 更多