我想部署一个PSGI脚本,运行在Apache2与Plack。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定期检查一些变化,但我不知道什么时候。此外,它似乎创建了多个实例,所以在/mypath时,我有时会得到不同版本的script.psgi。手动刷新perl响应处理程序会很有帮助,而不必重新启动Apache或等待未知的时间。
发布于 2011-05-26 04:10:48
简单的回答是你不能,这就是为什么我们建议你使用plackup (和-r)来快速开发,而只将Apache用于部署(生产使用)。
另一种选择是使用一个开发apache进程,并将MaxRequestsPerChild设置为一个非常小的值,这样您就可以在非常短的时间内生成一个新的子进程。我还没有测试过这一点,如果您在同一进程上运行非开发应用程序,那么这样做肯定会影响整个httpd的性能(这本来就不是一个好主意)。
发布于 2011-05-25 20:34:54
Apache2::Reload (未测试)
发布于 2012-05-09 02:44:27
您可以将应用程序移出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 (未经过测试)
https://stackoverflow.com/questions/6124010
复制相似问题