[英]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.