1

我正在运行一些 FastCGI 脚本mod_fcgid,并且我希望在我对脚本进行任何更改时自动重新加载这些脚本。

在 下mod_fastcgi,您可以配置

FastCgiConfig -autoUpdate

做到这一点,但mod_fcgid没有这样的选择。有人对此有很好的解决方法吗?

我想出的最好的事情是:

while (my $cgi = CGI::Fast->new()) {
    processRequest($cgi);
    exit if -M $0 < 0;  # restart if script changed
}

在处理另一个请求后退出。但这并不理想,尤其是当有多个脚本实例运行时,所有旧实例可能需要很长时间才能有机会再次运行并退出。

如果我做exitbefore processRequest,用户会收到一个错误,所以也不会这样做。

提前致谢,

– 迈克尔

4

2 回答 2

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 应用程序甚至更好,但这个版本使您免于重写大部分应用程序)。

于 2012-03-20T14:44:46.147 回答
2

我根本没有尝试过,但会Module::Refresh为您的mod_fcgid目的工作吗?

于 2012-03-12T22:22:29.993 回答