2010-11-10 94 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

相關問題