繁体   English   中英

如何在不重启的情况下在 Apache 中部署 PSGI 脚本?

[英]How do you deploy a PSGI script in Apache without restarting?

我想用 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 --reload上的更新。 在生产环境中,出于性能原因,Apache 和 Plack 不会检查并重新启动每次更改,但我如何明确告诉他们重新启动Plack::Handler::Apache2和/或 PSGI 脚本以部署新版本?

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

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

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

您可以将您的应用程序移出 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 (未测试)

Apache2::重新加载(未经测试)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM