我正在运行一些 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
}

处理完一个请求后退出。但这并不理想,特别是当脚本有多个实例运行时,可能需要相当长的时间才能让所有旧实例有机会再次运行并退出。

如果我这样做 exitprocessRequest, ,用户会收到错误,所以这也不起作用。

提前致谢,

——迈克尔

有帮助吗?

解决方案

正确的做法有点微妙。我建议看看 普拉克::加载器::重启器 了解如何做到这一点,或者更好地调整您的应用程序以在 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 应用程序甚至更好,但此版本使您无需重写大部分应用程序)。

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top