我们有一个设置,在提升到完全生产之前,大多数代码都是以BETA模式部署的--这意味着它在完整的生产环境中运行(使用生产数据库--通常是生产数据;以及生产web服务器)。我们称之为阶段测试。
主要要求之一是BETA代码升级到产品必须是一个简单的"cp“命令,从beta到产品目录-没有代码/文件名更改。
对于非web Perl代码,实现无缝BETA测试是可行的(详见此处):
/usr/code/scripts)下的标准位置,而生产perl模块则生活在同一个根(/usr/code/lib/perl)下。/usr/code/beta/)之外,beta代码具有100%相同的代码路径。/usr/code/scripts调用还是从/usr/code/test/scripts调用来操作任何脚本的beta库,以包括beta脚本的beta库。这个设置工作正常,直到我们需要测试我们的EmbPerl代码(设置是EmbPerl和Apache/mod_ Perl )。
挂起的情况如下:如果生产Perl模块和BETA Perl模块都有相同的名称(例如,/usr/code/lib/perl/MyLib1.pm /usr/code/beta/lib/perl/MyLib1.pm**),和,那么mod_perl将只能将其中一个模块加载到内存**)--我们不可能知道某个特定的网页会因为并发问题而影响当前加载模块的哪个版本。
撇开明显的非编程解决方案(获得一个血腥的BETA web服务器)相比,出于政治/组织原因,我们是否可以在Perl或mod_perl中以某种方式解决这个问题?
我尝试了各种方法来卸载%INC列出的Perl模块,但问题仍然是,另一个用户可能会在正确(或者说是错误的)时刻加载一个beta页面,并加载将用于我的生产页面的beta模块。
发布于 2010-03-19 03:26:22
使用mod_perl 2.0,您可以使用PerlOptions +亲本为每个vhost创建一个单独的Perl解释器池。当然,它会花费你额外的内存,但它会起作用。
https://stackoverflow.com/questions/2474734
复制相似问题