2012-09-14 1 views
0

처음으로 손을 잡고 있습니다 ->우분투의 Apache - Perl (CGI).@INC에서 Connection.pm을 찾을 수 없습니다 (@INC에는 다음이 포함됩니다 : /usr/local/lib/perl/5.14.2/etc/perl/usr/local/share/perl/5.14.2 ....). ./select.cgi at line

아파치 서버는 /var/www 폴더에서 정상적으로 index.html 파일을 사용하고 있습니다. 그러나 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"; 

펄은 ...

  • /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;를 발견하면 use lib, for example). If you find 패키지 연결과 같이, 당신은 @INC을 (수정해야, , you need to change the use` 지시어를

+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에서 컴파일이 실패했습니다.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 문제를 해결합니다. 때때로 비표준 위치에 설치된 일부 모듈을 사용해야합니다. 이 상황을 처리 할 수있는 몇 가지 방법이 있습니다 :

모듈이 @INC 경로 사용인지 확인하십시오.

예 :

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

당신은 펄이 단순히 출력을 인쇄하지 않고이 명령에서 반환 SOAP::Lite 설치 Error,이 시스템에서 다음 명령을 실행합니다. 당신은 관리 권한이있는 경우

perl -le 'print foreach @INC' 

, 다음 가장 좋은 방법은 시스템 정의 된 라이브러리 경로의에 모듈을 설치하는 것입니다 :

는 현재의 표준 라이브러리 경로 사용을 확인하십시오.

환경 변수 설정 PERL5LIB Perl은 표준 라이브러리와 현재 디렉토리에서 찾기 전에 PERL5LIB 환경 변수에 지정된 디렉토리에서 모듈을 찾습니다. 그래서이 변수를 설정하여 모듈을 찾을 수 있습니다.

예 :

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

참고 : 유닉스 및 Windows에서 세미콜론과 콜론으로 디렉토리를 구분한다.

명령 줄에서 코드를 실행하는 경우 -I 매개 변수를 사용하십시오. 구문은 다음과 같아야합니다.path lib에는 사용

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