【问题标题】:How to run multiple perl Dancer2 apps in same nginx server如何在同一个 nginx 服务器中运行多个 perl Dancer2 应用程序
【发布时间】:2017-12-05 11:22:18
【问题描述】:

我认为我可以使用nginx 中的位置管理多个应用程序。

但似乎我无法在具有不同端口的同一服务器上运行多个 dancer2 应用程序(如 localhost:3000、localhost:4000)

无论如何我把它放在这里是希望专家能给我一些启示。

【问题讨论】:

  • 您可以在同一个 PSGI 文件中部署多个 PSGI 应用程序,并在同一个端口上的同一个 plackup 上运行它们。 D2 旨在让您甚至可以在一个 PSGI 文件中拥有同一应用程序的多个实例。但这有风险,如果一个崩溃,它会带走其他人。一般的方法是在自己的端口(或套接字)上单独运行每个。为什么会有这样的问题?
  • 但我似乎无法在同一服务器上使用不同端口运行多个 dancer2 应用程序 我认为这是错误的。我不明白为什么这会是个问题。您能否扩展您的问题以解释尝试此操作时出了什么问题。
  • 我刚开始学习 RESTapi 和 Dancer。如果我编写像 app1.pl 和 app2.pl 这样的 2 个 dancer 脚本,则无法在同一服务器上启动这两个应用程序,因为 dancer 设计为与单端口一起使用。所以总是第一个应用程序保留端口,第二个应用程序将无法监听它,因为该端口已在使用中。
  • dancer 设计用于单端口 这不是真的。在不同的端口上运行多个 Dancer2 应用程序很容易。 Dancer2 应用程序对它们运行的​​端口一无所知 - 这是由您使用的部署机制设置的。这取决于您运行应用程序的方式,但例如使用plackup,您可以运行plackup -p 3000 app1.psgiplackup -p 4000 app2.psgi
  • @Dave 似乎这是一个不阅读文档的简单问题。您应该将其充实到答案中。

标签: perl nginx dancer


【解决方案1】:

当您有多个 Dancer2 应用程序时,您可以使用Plack::App::URLMapPlack::Builder 中提供的包装语法将它们组合在一起:

use MyApp::Main;
use MyApp::Admin;

builder {
    mount '/'      => MyApp::Main->to_app;
    mount '/admin' => MyApp::Admin->to_app;
};

安装的效果是这些应用程序将完全分开,Plack::Builder 将确保只有适当的应用程序处理给定的请求。

来源:http://advent.perldancer.org/2014/9

【讨论】:

  • 正如我在上面的评论中所说,这存在共享父进程的问题。如果其中一个应用程序崩溃,它可能会带走所有应用程序。这可能是也可能不是什么大问题。当然取决于有多少机器在运行这些,产品是什么等等。但这是有风险的。
【解决方案2】:

但似乎我无法在具有不同端口的同一服务器上运行多个 dancer2 应用程序(如 localhost:3000、localhost:4000)

这不是真的。 Dancer(当然还有 Dancer2)应用程序对它们正在监听的端口一无所知。这一切都由您的部署环境处理。例如,如果您有两个名为 app1.psgiapp2.psgi 的 Dancer 应用程序,并且您以 plackup 启动它们,那么您可以使用 -p 命令行选项让它们在不同的端口上运行。

$ plackup -p 3000 app1.psgi
$ plackup -p 4000 app2.psgi

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2019-10-29
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2019-01-26
    • 2014-05-05
    • 1970-01-01
    相关资源
    最近更新 更多