4

最近我在我的 RHEL 5 上使用 perl 版本 5.8.8 安装了一些 perl 模块,所有安装都很好。我可以看到这些模块存在于@INC 中,但我的 TWiki 站点声称它找不到它们返回错误:Can't locate Net/LDAP.pm in @INC(很多包含模块的路径)在TWiki.pm 第 xx 行。当我这样做perl -e 'use Net::LDAP';时,它不会返回任何东西,这意味着 perl 可以找到该模块。除了使用我必须安装的特定模块的插件外,TWiki 也被正确配置并且工作正常,我什至添加了 setLib.cfg 的路径以防万一。

编辑:

which perl返回/usr/bin/perl

的shebang线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.所以它使用正确的路径。

4

5 回答 5

4

@INC 可能与你的命令行不同——要么是因为你使用了不同的 Perl 解释器二进制文件,要么是其他影响@INC.

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

您可能必须将目录添加到您的 Web 服务器的 Perl 的 @INC 中,这些目录存在于命令行中(“如何”取决于您是否在 mod_perl 下运行)。

于 2010-11-10T16:04:06.720 回答
3

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

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

于 2010-11-10T15:55:18.197 回答
2
  1. 这样做(它适用于很多情况):

    perldoc -l Net::LDAP
    

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

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


因为,这对你不起作用,这应该:

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

如果 perl实际上正在加载它,那将告诉您它是从哪里加载的。

于 2010-11-10T16:03:16.793 回答
1

Horses:您是否查看过安装指南以确保一切都正确配置?

Zebras:编辑 bin/twiki_cgi 并在 $TWiki::engine->run() 之前添加:

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

grep apache 错误日志中带有 ENV 和 INC 的行。查找带有 PERL5LIB 或 PERLLIB 的 ENV 行。检查 INC 行以确保列出包含 CPAN 库的目录。

于 2010-11-10T17:06:08.333 回答
1

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

于 2010-11-25T13:35:07.737 回答