为什么TWiki找不到已经在@INC中的模块?

时间:2010-11-10 15:49:18

标签: perl rhel twiki

最近我在我的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.所以它使用了正确的路径。

5 个答案:

答案 0 :(得分:4)

@INC可能与您的命令行不同 - 要么是因为您正在使用不同的Perl解释器二进制文件or other factors affecting @INC

检查命令行的@INCperl -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)

  1. 这样做(它适用于很多情况):

    perldoc -l Net::LDAP
    

    如果文件中有POD,它会指向.pm。即便如此,如果它指向.pod文件,.pm通常位于同一目录中。

  2. 然后在@INC(之后检查该列表,看看路径是否在那里。您可能需要修改Apache运行的环境,因为它可能不会在那里。


  3. 因为,这不适合你,这应该:

    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无法执行/使用它们。