3

我想用 Plack 部署一个在 Apache2 中运行的 PSGI 脚本。Apache 配置为:

<Location "/mypath">
  SetHandler perl-script
  PerlResponseHandler Plack::Handler::Apache2
  PerlSetVar psgi_app  /path/to/my/script.psgi
</Location>

当我使用 plackup 测试脚本时,参数会监视文件--reload上的更新。.psgi在生产环境中,出于性能原因,Apache 和 Plack 不会检查并重新启动每次更改都很好,但是我如何明确告诉他们重新启动Plack::Handler::Apache2和/或 PSGI 脚本部署新版本?

看起来 Plack 会定期检查一些变化,但我不知道什么时候。此外,它似乎创建了多个实例,所以我有时会得到不同版本的script.psgiwhen at /mypath。手动刷新 perl 响应处理程序会很有帮助,而不必重新启动 Apache 或等待未知的时间。

4

3 回答 3

7

简短的回答是你不能。这就是为什么我们建议您使用 plackup(带 -r)进行快速开发,并将 Apache 仅用于部署(生产使用)。

另一个选项是有一个开发 apache 进程,并将 MaxRequestsPerChild 设置为一个非常小的值,这样您就可以在很短的时间内产生一个新的孩子。我没有对此进行测试,如果您运行在同一进程上运行的非开发应用程序,这样做肯定会影响整个 httpd 的性能(无论如何这首先是个坏主意)。

于 2011-05-25T20:10:47.590 回答
1

Apache2::Reload(未经测试)

于 2011-05-25T12:34:54.267 回答
1

您可以将您的应用程序移出 appache 进程,例如

FastCgiExternalServer /virtual/filename/fcgi -socket /path/to/my/socket

运行你的程序

plackup -s FCGI --listen /path/to/my/socket --nproc 10 /path/to/my/script.psgi

这样您就可以在不重新启动 apache 的情况下重新启动应用程序。

如果您保存主 fcgi 进程的 pid (--pid $pid_file),您可以轻松地重新启动加载新代码。

还有一个模块可用于管理(启动、停止、重新启动)所有 fcgi 池: https ://metacpan.org/pod/FCGI::Engine::Manager::Server::Plackup (未测试)

于 2012-05-08T18:44:27.130 回答