Pourquoi est-ce que mon simple fastCGI script Perl échec?
Je ne suis pas du Perl monde, de sorte que certains de cela est nouveau pour moi. Je suis sur Ubuntu Hardy LTS avec apache2 et mod_fcgid les packages installés. Je voudrais obtenir MT4 cours d'exécution en vertu de l'fcgid plutôt que de mod-cgi (il semble fonctionner OK avec la plaine-vieux CGI).
Je n'arrive pas à obtenir même un simple script Perl pour s'exécuter sous fcgid. J'ai créé un simple "Hello World" application et le code de cette question précédente pour tester si FCGI est en cours d'exécution.
J'ai nommé mon script HelloWorld.fcgi (actuellement fcgid est mis à traiter .fcgi fichiers uniquement). Code:
#!/usr/bin/perl
use FCGI;
print "Content-type: text/html\n\n";
print "Hello world.\n\n";
my $request = FCGI::Request();
if ( $request->IsFastCGI ) {
print "we're running under FastCGI!\n";
} else {
print "plain old boring CGI\n";
}
Lorsque vous exécutez à partir de la ligne de commande, il imprime la "bonne vieille ennuyeux..." Lorsqu'il est appelé via une requête http d'apache, j'obtiens une erreur de Serveur Interne 500 et la sortie du script est imprimée dans le journal des erreurs d'Apache:
Content-type: text/html
Hello world.
we're running under FastCGI!
[Wed Dec 03 22:26:19 2008] [warn] (104)Connection reset by peer: mod_fcgid: read data from fastcgi server error.
[Wed Dec 03 22:26:19 2008] [error] [client 70.23.221.171] Premature end of script headers: HelloWorld.fcgi
[Wed Dec 03 22:26:25 2008] [notice] mod_fcgid: process /www/mt/HelloWorld.fcgi(14189) exit(communication error), terminated by calling exit(), return code: 0
Quand je lance le .cgi version du même code, il fonctionne très bien. Aucune idée de la raison de la sortie du script est d'aller dans le journal des erreurs? De configuration d'Apache est la valeur par défaut mod_fcgid config plus, dans une directive VirtualHost:
ServerName test1.example.com
DocumentRoot /www/example
<Directory /www/example>
AllowOverride None
AddHandler cgi-script .cgi
AddHandler fcgid-script .fcgi
Options +ExecCGI +Includes +FollowSymLinks
</Directory>
OriginalL'auteur sstrudeau | 2008-12-03
Vous devez vous connecter pour publier un commentaire.
- Je utiliser CGI::Jeûner plus de FCGI, mais l'idée est la même, je pense. L'objectif de fast cgi est de charger le programme une fois, et les réitérer dans une boucle pour chaque demande.
FCGI page man dit :
Ce qui signifie, vous avez à
Accept
la demande avant d'être en mesure d'imprimer quoi que ce soit pour le navigateur.OriginalL'auteur mat
Le problème est que le "Content-Type" en-tête est envoyé à l'extérieur de la demande de la boucle. Vous devez imprimer le "Content-Type" en-tête pour chaque demande. Si vous déplacez
au sommet de la demande de la boucle, il devrait résoudre le problème.
Aussi, vous avez besoin de faire une boucle sur les demandes ou vous aurez aucun avantage, à la suite de la première affiche de l'exemple:
OriginalL'auteur Jamie
Movable Type utilise CGI::Rapide pour FastCGI. Le typique FastCGI script s'exécute dans une boucle, comme mat décrit. Une boucle qui utilise CGI::Rapide devrait ressembler à ceci:
J'ai testé ce script sur un serveur avec le FCGI et CGI::Rapide, modules installés et incrémentent comme vous le souhaitez. Si le processus de changements d'identité, le comte va revenir à 1, et puis incrémenter dans le processus. Chaque processus a sa propre variable de l'espace de cours.
Pour MT, permettant FastCGI une question de renommer (ou faire un lien symbolique), les scripts cgi 'fcgi' (ou faire de la gestionnaire pour 'cgi' scripts fcgid, mais cela ne fonctionnera pas pour mt-xmlrpc.cgi qui n'est pas FastCGI sympathique encore). Vous aurez également besoin d'ajouter des directives à votre
mt-config.cgi
fichier de sorte qu'il sait les nouveaux noms de script. Comme ceci:Et ainsi de suite. Plus de la documentation spécifique à FastCGI et Movable Type est disponible sur movabletype.org.
OriginalL'auteur Brad Choate
De toute façon, basé sur votre journal des erreurs du serveur, il ressemble à FCGI est au travail, et d'être appelé correctement, mais que votre script n'est pas en cours d'exécution dans une boucle, en attendant la prochaine demande de venir le long. Si votre script de test n'a accomplir la tâche, et les rapports que FastCGI est configuré ou pas. Maintenant, vous devriez être en mesure de reconfigurer MT à utiliser FastCGI.
OriginalL'auteur Brad Choate