最近我在我的RHEL 5上使用perl版本5.8.8安装了一些perl模块,所有的instalations都没问题。我可以看到模块存在于@INC中但是我的TWiki站点声称它找不到它们返回错误:无法在@INC(很多包含模块的路径)中找到Net / LDAP.pm TWiki.pm行xx。当我执行perl -e 'use Net::LDAP';
时,它不返回任何意味着perl可以找到该模块的东西。此外,TWiki配置为corectly并且工作正常,除了使用我必须安装的特定模块的插件,我甚至添加了setLib.cfg的路径以防万一。
编辑:
which perl
返回/usr/bin/perl
twiki/cgi-bin/view
的shebang行是#!/usr/bin/perl -wT
perl -MNet::LDAP -e 'print $INC{"Net/LDAP.pm"}, "\n";'
返回:
/usr/lib/perl5/site_perl/5.8.8/Net/LDAP.pm
apache错误日志显示:[Tue Nov 16 10:53:47 2010] [error] [client 10.76.14.170] [Tue Nov 16 10:53:47 2010] view: INC /usr/lib/perl5/site_perl/5.8.8 at /usr/local/apache2/htdocs/twiki5_pdc/bin/view line 44.
所以它使用了正确的路径。
答案 0 :(得分:4)
@INC可能与您的命令行不同 - 要么是因为您正在使用不同的Perl解释器二进制文件or other factors affecting @INC
。
检查命令行的@INC
:perl -e 'print join(",", sort @INC);'
- 并与您提到的Wiki错误中打印的@INC
进行比较。
您可能必须将目录添加到Web服务器的Perl的@INC中,这些目录存在于命令行中(“how”取决于您是否在mod_perl下运行)。
答案 1 :(得分:3)
Apache认为您的INC路径是什么以及您的命令行Perl认为您的INC路径通常是两个完全不同的东西。您可能必须在Apache配置中设置环境变量PERL5LIB
。
我是TWiki / FOSwiki的忠实粉丝,过去曾多次遇到过这个问题。
答案 2 :(得分:2)
这样做(它适用于很多情况):
perldoc -l Net::LDAP
如果文件中有POD,它会指向.pm
。即便如此,如果它指向.pod
文件,.pm
通常位于同一目录中。
然后在@INC(
之后检查该列表,看看路径是否在那里。您可能需要修改Apache运行的环境,因为它可能不会在那里。
因为,这不适合你,这应该:
perl -MNet::LDAP -e 'print $INC{"Net/LDAP.pm"}, "\n";'
如果perl 实际加载它,那将告诉你从哪里加载它。
答案 3 :(得分:1)
Horses:您是否已审核installation guide以确保所有内容都配置正确?
Zebras:编辑bin / twiki_cgi并在$ TWiki :: engine-> run()之前添加:
warn "ENV $_ => $ENV{$_}" for sort keys %ENV;
warn "INC $_" for @INC;
使用ENV和INC查找行的apache错误日志。查找PERL5LIB或PERLLIB的ENV行。检查INC行以确保列出包含CPAN库的目录。
答案 4 :(得分:1)
好的原因很可能是我以root身份安装了perl模块,并且没有为其他人设置可执行文件,因此apache无法执行/使用它们。