2010-08-12 6 views
0

J'ai réussi plusieurs succès partiels, mais je n'arrive pas à franchir le dernier obstacle. Symptôme: En mode de test, FastCGI fonctionne parfaitement. Lors de l'exécution de scripts Perl en mode Eval ou Do, il fonctionne parfaitement. Dès que j'essaie d'accéder à l'objet FCGI :: Request() ou au nouvel objet CGI :: Fast->, il se bloque indéfiniment. Voici ma config:Comment configurer FastCGI sur IIS 6 pour charger correctement les modules Perl

[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 

Vous pouvez voir les choses que j'ai essayées référencées ci-dessus avec; L'utilisation de ActiveState ou Strawberry entraîne le même comportement. Si je mets l'argument -MFCGI :: IIS à "test", il exécute parfaitement les tests. Eval, do, et aucun paramètre ne se bloque indéfiniment. Plus significatif, si je mets les Arguments = à un fichier FCGI valide (ou .pl/.cgi/.pm) alors ce seul script fonctionnera parfaitement. L'instance perl persiste exactement comme elle le devrait, et fonctionne avec la vitesse annoncée. Les appels aux méthodes FCGI :: Request() ou CGI :: Fast-> renvoient tous les objets qu'ils devraient. Tout est positivement hunky dory, mais ce n'est pas la bonne config. J'ai une série de fichiers cgi, et je devrais créer une entrée de mappage séparée pour chaque fichier cgi pour que ce kludge moche fonctionne.

Je suppose qu'il me manque un paramètre qui provoque l'envoi du nom du script en tant qu'argument à perl, mais je ne peux pas voir le paramètre. Merci pour toute aide.

Éditer: Ma suspicion est incorrecte. FCGI appelle définitivement les bons scripts, mais il les appelle avec le mauvais environnement en quelque sorte. Si j'utilise l'argument -MFCGI :: IIS, j'appelle exactement le même script que si j'utilisais l'argument de chemin explicite, mais quand j'utilise l'argument de chemin explicite, les scripts peuvent trouver leurs bibliothèques. Mon défi est d'obtenir les scripts pour identifier leurs bibliothèques correctement.

Lorsque vous utilisez -MFCGI :: IIS ce script échoue:

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

L'erreur est:

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. 

Lorsque vous utilisez une référence de script explicite, ce script entièrement gain de cause. Il maintient le même PID perl, maintient son compte et renvoie des valeurs précises. Surtout, cependant, il peut importer ses modules.

#!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); 
} 

Il faut juste qu'il y ait de la variable ENV que je puisse définir pour que je puisse trouver ses modules.

Répondre

0

Microsoft signale que son outil FastCGI n'a pas été testé avec Perl. Vous ne pouvez pas y arriver d'ici. D'un autre côté, vous pouvez progresser en utilisant IIS 7 et PerlEx30.dll. J'ai eu de la chance avec ça avant d'être appelé à un autre projet.