2010-06-28 2 views
3

나는 perl로 작성되고 CGI로 실행되는 스크립트를 가지고있다. 그것은 잘 작동합니다. 최근 아파치에 mod_perl 모듈을 설치하고, PerlModule ModPerl :: Registry 지시어를 사용했습니다.mod_perl이 포함 경로를 cgi와 다르게 처리합니까?

PerlModule ModPerl::Registry 
PerlModule CGI 
PerlSendHeader On 

Alias /perl/ /real/path/to/perl/scripts/ 
<Location /perl> 
SetHandler perl-script 
PerlHandler ModPerl::Registry 
Options ExecCGI 
</Location> 

<Files *.perl> 
SetHandler perl-script 
PerlHandler ModPerl::Registry 
Options ExecCGI 
</Files> 

나는 이것을 사용하여 내 cgi perl 코드를 수정할 필요가 없음을 읽었습니다. (저는 항상 엄격한 pragma를 사용합니다. 그래서 초기화되지 않은 전역 변수와 그런 것들에 대해 걱정하지 마십시오.)

내 원래 스크립트는 한 가지를 제외하고는 의도 한대로 작동하지만 require() 함수에 포함 된 파일은 더 이상 해석 할 수 없습니다.

script.cgi :

#!/usr/bin/perl -w 
use strict; 
use CGI qw(:standard Vars); 
require "includes/functions.perl"; # <---- Returns error: Can't locate includes/functions.perl in @INC 
#blah blah, more stuff 

디렉토리 구조는 다음과 같이 작동

#!/usr/bin/perl -w 
use strict; 
use CGI qw(:standard Vars); 
require "includes/functions.cgi"; 

#blah blah, more stuff 

script.perl :

이 이

$ 1!

script.cgi의 script.perl 포함 /

$ 1! 포함/

functions.cgi의 functions.perl에서

+0

'includes/functions .perl'은 제대로 위치하고 있지만, 더 의존성 인,'body.html.cgi'을 찾을 수 없습니다. 이 파일의 이름도'.cgi'에서'.perl'로 바꿔야 할 것 같습니다. mod_perl 스크립트의 디렉토리에 복사되지 않았습니까? – pilcrow

+0

오 죄송합니다. 잘못된 오류 메시지를 썼습니다. 반환 된 오류 메시지는 "Include/functions.perl in @INC"를 찾을 수 없습니다. body.html.cgi은 이것과 무관 한 다른 것입니다. –

답변

2

: http://perl.apache.org/docs/2.0/api/ModPerl/Registry.html

META : 문서가 전체 프로세스에 영향을주기 때문에 지금 우리는 스크립트의 디렉토리에() chdir와하지 않는 것이 스레드 아래에. ModPerl :: RegistryPrefork는 prefork MPM 하에서 만 실행하는 사람들이 사용해야합니다.

Apache2의 prefork MPM을 사용하는 경우 ModPerl :: RegistryPrefork을 사용해보십시오. worker, event 또는 windows를 사용하고 있다면 cwd가 perl이 앉아있는 디렉토리라고 가정하지 않도록 프로그램을 변경해야합니다.

+0

감사합니다! 그건 의미가 있습니다. –

관련 문제