2012-09-14 67 views
0

我在第一次嘗試我的手 - >Apache - Perl(CGI)在Ubuntu上。無法找到@INC中的Connection.pm(@INC包含:/usr/local/lib/perl/5.14.2/etc/perl /usr/local/share/perl/5.14.2 ....)at ./select.cgi在線

對於默認的index.html文件,Apache服務器在文件夾/var/www中工作正常。但是因爲我想運行一個CGI腳本,所以我也安裝了(以防萬一)DBI,正如一些論壇所建議的那樣。我設置了完整訪問select.cgi腳本所在的cgi-bin文件夾的權限。我嘗試多次調整select.cgi腳本,將庫重定向到Perl庫,但無濟於事。我修改了httpd.conf文件並將目錄路徑設置爲select.cgi文件夾。這沒有用。我還定義了ScriptAlias,並將其設置爲工作目錄。那也行不通。 有沒有人有任何有用的指針。謝謝。

回答

1

在一個評論,你給的信息違背您最初所付出的。後面的信息似乎更可靠,所以我會用它。

我相信你說的模塊路徑是

/usr/lib/perl5/vendor_perl/5.8.5/foo/bar/Connection.pm 

而且你得到了錯誤消息(換行添加的)是:

Can't locate foo/bar/Connection.pm in @INC (@INC contains: 
    /etc/perl 
    /usr/local/lib/perl/5.14.2 
    /usr/local/share/perl/5.14.2 
    /usr/lib/perl5 
    /usr/share/perl5 
    /usr/lib/perl/5.14 
    /usr/share/perl/5.14 
    /usr/local/lib/site_perl 
    . 
    /usr/lib/perl5/vendor_perl/5.8.5/foo/bar/ 
) at ... 

你不喜歡的東西

use foo::bar::Connection; 

require "foo/bar/Connection.pm"; 

Perl中尋找

  • /etc/perl/foo/bar/Connection.pm
  • /usr/local/lib/perl/5.14.2/foo/bar/Connection.pm
  • ...
  • /usr/lib/perl5/vendor_perl/5.8.5/foo/bar/foo/bar/Connection.pm

但這些都不是

/usr/lib/perl5/vendor_perl/5.8.5/foo/bar/Connection.pm 

這很容易修復。以下添加到您的腳本:

use lib '/usr/lib/perl5/vendor_perl/5.8.5'; 

另一個可能的解決辦法是使用

use Connection; 

,而不是

use foo::bar::Connection; 

哪個修復是正確的修復取決於什麼package線模塊看起來像。如果發現package foo::bar::Connection;,則需要修改@INC(如use lib, for example). If you find包連接所示; , you need to change the使用指令)

+0

我想寫我的評論,但600個字符的空間太短,因此它不允許我寫我的更改和隨後的錯誤。讓我試試,縮短我的迴應 – Benny

+0

@ ikegami我添加了'在''select.cgi'文件中BEGIN {push(@INC,'/ usr/local/lib/perl/5.14.2');}'在'5.14.2'中,我有'foo/bar/Connection''在'select.cgi'腳本文件中,我有'use foo :: bar :: Connection'這行代碼,這次我得到的錯誤是:'readMainConfFile:ERROR:爲conf文件搜索並且不能找到它也許你需要在/ var/www/..中創建一個。 /conf/foo/psat.conf。編譯在/usr/local/lib/perl/5.14的require中失敗。2/foo/bar/Connection.pm第15行。 BEGIN失敗 - 在/usr/local/lib/perl/5.14.2/foo/bar/Connection.pm第15行中編譯異常終止。' – Benny

+0

新錯誤無關到你的原始版本,而不是來自Perl,而是來自您的代碼或您正在使用的模塊。 – ikegami

4

這並不是您想要的確切解決方案,但總體思路如下。

如何解決Cant locate xxxx.pm in @INC path問題

默認的perl會在標準庫的路徑和當前目錄的模塊。 有時您需要使用一些安裝在非標準位置的模塊;有幾種方法可以處理這種情況:

檢查您的模塊是否在@INC路徑中使用。

例子:

perl -e 'use SOAP::Lite;' 
perl -e 'use Error;' 

如果您運行具有SOAP::Lite和安裝Error,Perl會簡單地從這些命令返回,不打印任何輸出的系統上這些命令。

要檢查當前的標準庫路徑使用:

perl -le 'print foreach @INC' 

如果您有管理權限,那麼最好的解決辦法是安裝在模塊中的任何系統中定義的庫路徑中。

設置環境變量PERL5LIB 在查看標準庫和當前目錄之前,Perl將在PERL5LIB環境變量中指定的目錄中查找模塊。 所以你可以設置這個變量來定位你的模塊。

例子:

# For unix like systems 
PERL5LIB=/home/path/lib:/usr/another/path/lib; export PERL5LIB 

注:與UNIX和Windows上分號分隔冒號的目錄。

如果您從命令行運行代碼,則使用-I參數。語法應該是類似的。使用LIB path

perl -I /home/path/lib -I /usr/another/lib script.pl 

而且你還可以包括在腳本中的路徑添加庫路徑在腳本

的命令。

例子:

#!/usr/bin/perl 
use lib "/home/path/lib"; 
use lib "/usr/another/lib"; 

use MyCustomModule; 
+0

謝謝,我其實已經嘗試了上面的,沒有修復它,我不知道,我要去哪裏 – Benny

相關問題