gpt4 book ai didi

perl - 如何在生产 Web 服务器上的 Apache/mod_perl 下对 Web Perl 模块进行 Beta 测试?

转载 作者:行者123 更新时间:2023-11-28 20:07:06 25 4
gpt4 key购买 nike

我们有一个设置,其中大多数代码在被提升到全面生产之前都以 BETA 模式部署 - 这意味着它在完整的生产环境中运行(使用生产数据库 - 通常是生产数据;和生产网络服务器)。我们称该阶段为 BETA 测试。

其中一个主要要求是,从测试版到生产目录的 BETA 代码升级必须是一个简单的“cp”命令 - 没有代码/文件名更改。

对于非网络 Perl 代码,实现无缝 BETA 测试是非常可行的 (see details here):

  • Perl 程序位于生产根目录下的标准位置 (/usr/code/scripts),生产 perl 模块位于同一根目录下 (/usr/code/lib/perl)
  • BETA 代码具有 100% 相同的代码路径,除了 beta root (/usr/code/beta/)
  • 一个特殊的模块根据脚本是从 /usr/code/scripts 还是从 /usr/code/test 调用来操作任何脚本的 @INC/scripts,包含测试版脚本的测试版库。

在我们需要对 Web Perl 代码进行 beta 测试之前,此设置工作正常(设置为 EmbPerl 和 Apache/mod_perl)。

挂断如下:如果生产 Perl 模块和 BETA Perl 模块具有相同的名称(例如 /usr/code/lib/perl/MyLib1.pm/usr/code/beta/lib/perl/MyLib1.pm),然后 mod_perl 将只能将其中一个模块加载到内存中 - 我们无法意识到由于并发问题,特定网页会影响当前加载的模块版本。

撇开出于政治/组织原因不可行的明显的非编程解决方案(获得该死的 BETA 网络服务器),有没有什么办法可以在 Perl 或 mod_perl 中解决这个问题?

我试过各种卸载 %INC 列出的 Perl 模块的方法,但问题仍然存在,另一个用户可能会在正确的(或错误的)时刻加载测试版页面,并且加载的 beta 模块将用于我的生产页面。

最佳答案

使用 mod_perl 2.0 你可以使用 PerlOptions +Parent为每个虚拟主机创建一个单独的 Perl 解释器池。当然,这会花费您额外的内存,但它会起作用。

关于perl - 如何在生产 Web 服务器上的 Apache/mod_perl 下对 Web Perl 模块进行 Beta 测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474734/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com