2008-12-19 6 views
7

Je lance le serveur web Apache sur Windows afin de travailler sur certains scripts CGI Perl. en production, ces scripts fonctionnent sur une boîte Linux, et dans le référentiel de code source, ils ont tous des shebangs: #!/usr/bin/perl, mais sur ma machine windows les shebangs sont #!c:\perl\bin\perl.exe, donc j'ai un conflit avec la base du code source.Comment utilisez-vous la directive Apache "ScriptInterpreterSource Registry-Strict"?

entrez la directive Apache ScriptInterpreterSource.

J'ai essayé de le faire fonctionner, basé sur ce que je peux google. mais jusqu'à présent, pas de chance. J'ai:

  1. ajouté ces choses à la directive appropriée AllowOverride None
    options ExecCGI FollowSymLinks index ordre allow, deny Allow de tous ScriptInterpreterSource Registry-Strict

  2. ajouté: AddHandler cgi -script .cgi

  3. édité mon registre et ajouté une nouvelle chaîne à

HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command=C:\Perl\bin\perl.exe 

, je sais que le travail sur ce serveur CGIs tant qu'ils ont le droit tralala.

mais lorsque je tente d'accéder à un CGI sans tralala le journal apache recrache:

Pas Exec CGI Verbe trouvé pour les fichiers de type 'cgi'

toute pensée, des idées, ou même des conjectures sauvages seraient appréciées.

merci.

Répondre

9

Il semble que la ligne ScriptInterpreterSource soit ignorée. Si elle est définie sur Registry ou Registry-Strict, elle doit ignorer les lignes shebang et utiliser le registre uniquement.

En outre, le Apache 2.2 docs ont un emplacement légèrement différent pour la clé de Registre:

HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command\(Default) => C:\Perl\bin\perl.exe -wT 
+0

vérifié cela fonctionne pour Apache 2.2.11 (Win32) avec mod_perl 2.0.4 et perl v5.10.0 – shufler

+0

Ce fixe mon problème, mais je trouve que l'utilisation du commutateur '-t' peut causer des problèmes plus code (par exemple, il fait que '@ INC' ne considère pas les chemins relatifs). –

+0

Travaux vérifiés pour Win2K3 Apache 2.2.17, ActivePerl 5.12.4 – PseudoNinja

0

Au lieu d'exécuter votre code perl dans des processus distincts CGI, envisagez d'utiliser mod_perl (Voir http://perl.apache.org). Mod_perl est beaucoup plus efficace, car le code Perl est chargé et analysé une seule fois, puis s'exécute directement dans les processus Apache sans avoir besoin de démarrer ou de communiquer avec d'autres processus.

0

Cela fonctionne également pour les scripts Python. J'ai fait ce qui suit pour réparer mon installation Apache afin d'ignorer l'exigence shebang dans mes scripts. Sans cela, le shebang est requis dans la version actuelle d'Apache 2.4 - ou du moins dans le mien.

# tell apache to use registry - this requried a registry hack 
# to the following: 
# [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command] = "c:\\python\\python.exe" 
ScriptInterpreterSource Registry-Strict 
Questions connexes