2010-11-10 64 views
3

最近我在我的RHEL 5上安装了一些perl模块,并使用perl 5.8.8版本,所有安装都很顺利。我可以看到模块存在于@INC中,但我的TWiki网站声称它找不到它们会返回错误:无法在@INC(包含模块的很多路径)中找到Net/LDAP.pm TWiki.pm line xx。当我做perl -e 'use Net::LDAP';它不会返回任何意味着Perl可以找到该模块的任何东西。此外TWiki配置corectly和工作正常,除了使用特定模块我必须安装的插件,我甚至添加了setLib.cfg的路径,以防万一。TWiki为什么找不到已经在@INC中的模块?

编辑:

which perl回报/usr/bin/perl

twiki/cgi-bin/view的家当线#!/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.所以使用是正确的路径。

回答

1

好吧,原因很可能是我以root身份安装perl模块,并且他们没有设置为其他人可执行,所以apache无法执行/使用它们。

3

Apache认为你的INC路径是什么,你的命令行Perl认为你的INC路径通常是两个完全不同的东西。您可能必须在Apache配置中设置环境变量PERL5LIB

我是TWiki/FOSwiki的忠实粉丝,过去曾多次遇到过这个问题。

+0

当我回显$ PERL5LIB时,它返回一个空行 – Miky 2010-11-10 16:24:02

2
  1. 做到这一点(它在相当多的情况下):

    perldoc -l Net::LDAP 
    

    如果POD的文件,它会指向你的.pm。即使如此,如果它指向.pod文件,.pm通常位于相同的目录中。

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


因为,这并不为你工作,这应该:

perl -MNet::LDAP -e 'print $INC{"Net/LDAP.pm"}, "\n";' 

如果Perl是实际上加载它,那会告诉你它加载它从。

+0

没有找到“Net :: LDAP”的文档。 尽管我在“/”目录中执行了该命令,但在我在其他目录中完成它的工作之前,我认为我在用于构建Net/LDAP模块的目录中,它返回了一个文件LDAP.POD它有一个符号链接,但我想这不是在系统中安装的那个,只是isntalaltion的剩余部分。 – Miky 2010-11-10 16:24:29

+0

@ user452730:尝试新的建议。 – Axeman 2010-11-10 16:33:32

+0

嗯,现在我得到了同样的错误,我在浏览器中得到: [michal @ bumas_tst〜] $ perl -MNet :: LDAP -e'use 5.010;说$ INC {“Net/LDAP.pm”};' 无法在@INC中找到Net/LDAP.pm(@INC包含:/usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8/usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8/usr/lib/perl5/vendor_perl/usr /lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8。)。 BEGIN失败 - 编译中止。 – Miky 2010-11-10 16:44:07

4

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

检查命令行的@INCperl -e 'print join(",", sort @INC);' - 并比较@INC打印在您提到的Wiki错误中。

您可能需要将目录添加到您的Web服务器的Perl的@INC,它们出现在命令行中(“如何”取决于您是否在mod_perl下运行)。

+0

我没有使用mod_perl和“软件错误:”(我假设浏览器上的是网络的@INC服务器?)包含与命令行@INC相同的路径(我用你给我的命令检查过的路径)。另外我怎样才能查看Web服务器的@INC,我不记得在我的apache配置中配置任何perl路径。 – Miky 2010-11-10 16:22:50

1

马匹:您是否查看过installation guide以确保所有配置都正确?

斑马:编辑斌/ twiki_cgi和$ TWiki的前添加正确::发动机 - >运行():

warn "ENV $_ => $ENV{$_}" for sort keys %ENV; 
warn "INC $_" for @INC; 

用grep Apache的错误日志与ENV和INC行寻找ENV行用。 PERL5LIB或PERLLIB。检查INC行以确保包含您的CPAN库的目录已列出。

+0

不错,这是有用的,我有一些问题:第二视图中的点是否正确,它的含义是什么?还有一些双斜杠的线也正确吗? (如/usr/local/apache2/htdocs/twiki5_pdc/lib/CPAN/lib//5.8.8/x86_64-linux-thread-multi)。 view:INC/usr/local/apache2/htdocs/twiki5_pdc/lib位于/ usr/local/apache2/htdocs/twiki5_pdc/bin/view line 44. view:INC。在/ usr/local/apache2/htdocs/twiki5_pdc/bin/view第44行。 – Miky 2010-11-16 09:57:42

+0

@INC中的点告诉perl搜索库的当前工作目录。在多个unixish平台上,连续路径分隔符被视为单个分隔符(//和/////与/相同)。 – converter42 2010-11-16 22:49:04

相关问题