我想在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脚本以部署新版本?
看起来普拉克会定期检查一些变化,但我不清楚何时。此外,它似乎创建了多个实例,因此我有时会在script.psgi
处获得/mypath
的不同版本。手动刷新perl响应处理程序而不必重新启动Apache或等待一段未知的时间会很有帮助。
答案 0 :(得分:6)
简短的回答是你不能。这就是为什么我们建议您使用plackup(使用-r)进行快速开发,并仅将Apache用于部署(生产使用)。
另一个选项是开发apache进程,并将MaxRequestsPerChild设置为一个非常小的值,这样你就可以在很短的时间内生成一个新鲜的孩子。我没有对此进行测试,如果你运行在同一进程上运行的非开发应用程序(这首先是一个坏主意),这样做肯定会影响整个httpd的性能。
答案 1 :(得分:1)
Apache2::Reload(未经测试)
答案 2 :(得分:1)
您可以将应用程序移出appache进程, e.g。
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(未经测试)