我正在mod_fcgid
下运行一些FastCGI脚本,我希望每当我对脚本进行任何更改时都会自动重新加载。
在mod_fastcgi
下,您可以配置
FastCgiConfig -autoUpdate
要做到这一点,但mod_fcgid
没有这样的选择。
任何人都有一个很好的解决方法吗?
我想出的最好的事情是:
while (my $cgi = CGI::Fast->new()) {
processRequest($cgi);
exit if -M $0 < 0; # restart if script changed
}
在处理一个请求后退出。但这并不理想,特别是当有多个脚本实例运行时,可能需要一段时间才能让所有旧实例再次运行并退出。
如果我在exit
之前执行processRequest
,则用户会收到错误,因此也不会这样做。
提前致谢,
- 迈克尔
答案 0 :(得分:4)
正确的做法有点微妙。我建议查看Plack::Loader::Restarter如何做到这一点,或者更好地调整你的应用程序以在Plack上运行,然后使用plackup的-r
选项启动它以自动加载重启器。调整您的应用可能比您预期的更容易,可能就像更改一样简单
use CGI::Fast;
while (my $cgi = CGI::Fast->new) {
processRequest($cgi);
}
到
use CGI::Emulate::PSGI;
use CGI;
my $app = CGI::Emulate::PSGI->handler(sub {
my $cgi = CGI->new;
processRequest($cgi);
});
(编写一个合适的原生PSGI应用程序甚至更好,但这个版本可以帮助您避免重写大部分应用程序。)
答案 1 :(得分:2)
我根本没有尝试过,但是Module::Refresh
是否适用于mod_fcgid
目的?