我使用的是一个perl cgi脚本,它使用我们自己的库,它使用的是“没有自动生动化”的实用化。例如。
/usr/lib/company/mysim.cgi:
#!/usr/bin/perl -w
use strict;
# ... other use
use Company::Module1;/usr/lib/perl5 5/Company/Module下午1时
package Company::Module1;
no autovivification;
use strict;
use warnings;大约有50%的时间,当访问URL以到达cgi脚本时,编译失败。
[Fri Dec 04 15:40:10.744901 2015] [:error] [pid 30455:tid 2961136448] Bareword "A_HINT_STRICT" not allowed while "strict subs" in use at /usr/lib/i386-linux-gnu/perl5/5.20/autovivification.pm line 144.\nBareword "A_HINT_WARN" not allowed while "strict subs" in use at /usr/lib/i386-linux-gnu/perl5/5.20/autovivification.pm line 144.\nBareword "A_HINT_FETCH" not allowed while "strict subs" in use at /usr/lib/i386-linux-gnu/perl5/5.20/autovivification.pm line 144.\nBareword "A_HINT_STORE" not allowed while "strict subs" in use at /usr/lib/i386-linux-gnu/perl5/5.20/autovivification.pm line 144.\nBareword "A_HINT_EXISTS" not allowed while "strict subs" in use at /usr/lib/i386-linux-gnu/perl5/5.20/autovivification.pm line 144.\nBareword "A_HINT_DELETE" not allowed while "strict subs" in use at /usr/lib/i386-linux-gnu/perl5/5.20/autovivification.pm line 144.\nCompilation failed in require at /usr/lib/company/mysim.cgi line 14.\nBEGIN failed--compilation aborted at /usr/lib/company/mysim.cgi line 14.\n(取自/var/log/apache2/ssl/error.log,因为此脚本位于https端口上)。
我的环境是:- debian (8.2) - tomcat7 - apache2 (2.4) - perl 5.20.2 -libautovivification perl 0.12-1+b1
我的问题是:
耽误您时间,实在对不起。
2015年9月12日:一些补充资料.
谢谢大家的反馈。
线程没有显式的创建,尽管这是在apache的上下文中,因此可能需要线程处理请求。
根本原因似乎是XSLoader中的失败。至少这个极小的例子..。
package autovivification;
use 5.008_003;
use strict;
use warnings;
our $VERSION;
BEGIN {
$VERSION = '0.12';
}
BEGIN {
require XSLoader;
XSLoader::load(__PACKAGE__, $VERSION);
}
my %bits = (
strict => A_HINT_STRICT,
warn => A_HINT_WARN,
fetch => A_HINT_FETCH,
store => A_HINT_STORE,
exists => A_HINT_EXISTS,
delete => A_HINT_DELETE,
);编译,而这个
package autovivification;
use 5.008_003;
use strict;
use warnings;
our $VERSION;
BEGIN {
$VERSION = '0.12';
}
#BEGIN {
# require XSLoader;
# XSLoader::load(__PACKAGE__, $VERSION);
#}
my %bits = (
strict => A_HINT_STRICT,
warn => A_HINT_WARN,
fetch => A_HINT_FETCH,
store => A_HINT_STORE,
exists => A_HINT_EXISTS,
delete => A_HINT_DELETE,
);同样的错误失败。
所以,我要四处看看apache日志中的负载错误.在某个地方。
再次感谢你抽出时间。
16/12/2015:更新-固定
根本原因是mod_perl,以及Apache2.2和2.4之间(可能的)变化。脚本的apache配置在设置由ScriptAlias处理的URI /cgi之前发生,该配置为/cgi/ script提供了一个URI URI。在Apache2.2中,这种排序似乎很重要,脚本是而不是mod_perl处理的。但是,在Apache2.4中,排序似乎并不重要,脚本现在由mod_perl处理。
出现此错误是因为mod_perl没有(也从未打算)处理此脚本。修复方法是将脚本的URI更改为/somethingelse/script。
感谢大家的评论。
发布于 2017-08-16 11:37:09
根本原因是mod_perl,以及Apache2.2和2.4之间(可能的)变化。脚本的apache配置在设置由ScriptAlias处理的URI /cgi之前发生,该配置为/cgi/ script提供了一个URI URI。在Apache2.2中,这种排序似乎很重要,而且脚本不是由mod_perl处理的。但是,在Apache2.4中,排序似乎并不重要,脚本现在由mod_perl处理。
出现此错误是因为mod_perl没有(也从未打算)处理此脚本。修复方法是将脚本的URI更改为/somethingelse/script。- HalfOpenedEye
https://stackoverflow.com/questions/34092559
复制相似问题