2010-08-12 6 views
0

몇 가지 부분 성공을 달성했지만 마지막 장애물을 넘을 수는 없습니다.IIS 6에서 FastCGI를 구성하여 Perl 모듈을 올바르게로드하는 방법

증상 : 테스트 모드에서 FastCGI가 완벽하게 수행됩니다. 평범한 perl 스크립트를 eval 또는 do 모드로 실행할 때 완벽하게 수행됩니다. FCGI :: Request() 객체 또는 CGI :: Fast-> new 객체에 액세스하려고하면 무한정 중단됩니다. 내 설정은 다음과 같습니다.

[Types] 
fcgi=FCGI 
cgi=FCGI 
pl=FCGI 
pm=FCGI 

[FCGI] 
ExePath=C:\perl\bin\perl.exe 
;ExePath=C:\strawberry\perl\bin\perl.exe 
Arguments="-MFCGI::IIS=eval" 
;Arguments=d:\inetpub\cgi-bin\hello.fcgi 
;Arguments=d:\inetpub\cgi-bin\h2.fcgi 
ActivityTimeout=5 
QueueLength=999 
MaxInstances=20 
InstanceMaxRequests=500 

위에서 언급 한 것을 참조 할 수 있습니다. ActiveState 또는 Strawberry를 사용하면 동일한 동작이 발생합니다. -MFCGI :: IIS 인수를 "test"와 동일하게 설정하면 테스트가 완벽하게 실행됩니다. Eval, do 및 no 설정은 모두 무기한 중지됩니다.

가장 중요한 것은 말하자면, 인수를 유효한 FCGI 파일 (또는 .pl/.cgi/.pm)로 설정하면 해당 단일 스크립트가 완벽하게 실행됩니다. perl 인스턴스는 필요한만큼 정확하게 호출 할 수 있으며 광고 된 속도로 실행됩니다. FCGI :: Request() 또는 CGI :: Fast-> new 메서드에 대한 호출은 모두 필요한 객체를 반환합니다. 모든 것이 긍정적으로 늠름한 dory이지만 올바른 설정이 아닙니다. 나는 cgi 파일의 뗏목을 가지고있다. 그리고 나는 그 cgi 파일을위한 별개의 매핑 엔트리를 만들어야 만 그 추악한 kludge 작업을 할 수있다.

필자는 스크립트의 이름을 perl의 인수로 보내지 만, param을 볼 수없는 설정이 누락 된 것으로 의심됩니다. 어떤 도움을 주셔서 감사합니다.

편집 : 내 의심이 잘못되었습니다. FCGI는 정확한 스크립트를 분명히 부르고 있지만 잘못된 환경에서 어떻게 든 호출합니다. -MFCGI :: IIS 인수를 사용하면 명시 적 경로 인수를 사용하는 것과 똑같은 스크립트를 호출하지만 명시 적 경로 인수를 사용하면 스크립트에서 해당 라이브러리를 찾을 수 있습니다. 내 도전 과제는 스크립트가 라이브러리를 올바르게 식별하도록하는 것입니다.

-MFCGI를 사용 :이 스크립트가 실패 IIS :

#!c:/perl/bin/perl 
use CGI::Fast; 

오류 :

Error! 
Can't locate object method "FILENO" via package "FCGI::Stream" at 
C:/Perl/lib/CGI.pm line 822. 
Compilation failed in require at C:/Perl/lib/CGI/Fast.pm line 20. 
BEGIN failed--compilation aborted at C:/Perl/lib/CGI/Fast.pm line 20. 
Compilation failed in require at (eval 4) line 4. 
BEGIN failed--compilation aborted at (eval 4) line 4. 

명시 적 스크립트 참조를 사용하여,이 스크립트는 완전히 성공합니다. 동일한 perl PID를 유지하고 카운트를 유지하며 정확한 값을 반환합니다. 대부분, 모듈을 가져올 수 있습니다.

#!c:/perl/bin/perl -w 
use strict; 

use CGI::Fast; 
my $count = 1; 
while (my $q = CGI::Fast->new) 
{ 
     print("Content-Type: text/plain\n\n"); 
     print("Process ID: $$; Count is: " . ++$count); 
} 

일부 모듈이있을 수 있도록 설정할 수있는 ENV var가 있어야합니다.

답변

0

Microsoft는 FastCGI 도구가 Perl로 테스트되지 않았다고보고합니다. 여기에서 갈 수는 없습니다. 반면에 IIS 7 및 PerlEx30.dll을 사용하여 진행할 수 있습니다. 다른 프로젝트를 호출하기 전에 그걸로 운이 좋았습니다.

관련 문제