6

我正在使用 mod _perl 开发一个应用程序,每次更改代码时都重新启动服务器是一个巨大的拖累。我想仍然使用 mod _perl 进行开发,因为它是我计划用于实时服务器的。我在文档中没有看到有关如何执行此操作的任何内容。

想法?

4

2 回答 2

9

我认为 Apache2::Reload 会在一定程度上完成你正在寻找的东西。但是,一旦您准备好将应用程序投入生产,请记住删除所有这些实现。

监控 %INC 中的所有模块

要在请求处理开始时监视和重新加载 %INC 中的所有模块,只需将以下配置添加到您的 httpd.conf:

PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload

使用连接过滤器和协议模块时,应在 pre_connection 阶段调用 Apache2::Reload:

PerlPreConnectionHandler Apache2::Reload

隐式注册模块

要仅重新加载已向 Apache2::Reload 注册的模块,请将以下内容添加到 httpd.conf:

PerlModule Apache2::Reload
PerlInitHandler Apache2::Reload
PerlSetVar ReloadAll Off
# ReloadAll defaults to On

然后任何带有该行的模块:

use Apache2::Reload;

当他们改变时将被重新加载。

有关信息,请查看此文档页面。希望这可以帮助。

于 2009-01-14T07:22:46.760 回答
2

我使用 Perrin Harkins 通过 PerlMonks 提供的这个解决方案:

将 MaxRequestsPerChild 设置为 1,然后在子节点中加载任何可能发生变化的模块,而不是父节点(显然仅适用于开发环境)。每个请求都会到达一个新的子服务器,它会重新加载所有可能发生变化的模块。

来自“在运行的 Web 服务器中查看模块更改的更好方法

于 2010-10-28T15:54:39.997 回答