2008-12-19 13 views
7

ejecuto el servidor web Apache en Windows para poder trabajar en algunas secuencias de comandos Perl CGI. en producción estos scripts se ejecutan en un linux box, y en el repositorio de código fuente todos tienen shebangs como: #!/usr/bin/perl, pero en mi máquina de Windows los shebangs serían #!c:\perl\bin\perl.exe, así que tengo un conflicto con la base del código fuente.¿Cómo se usa la directiva Apache "ScriptInterpreterSource Registry-Strict"?

ingrese la directiva Apache ScriptInterpreterSource.

He estado tratando de hacerlo funcionar, según lo que puedo googlear. pero hasta ahora sin suerte. tengo:

  1. añaden estas cosas a la directiva apropiada AllowOverride None
    Opciones Índices FollowSymLinks ExecCGI Orden allow, deny Dejar de todas las ScriptInterpreterSource Registro-Estricto

  2. añadido: cgi AddHandler -script .cgi

  3. edité mi registro y agregué un nuevo String al

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

Ahora, sé que el trabajo de CGI en este servidor, siempre y cuando tengan el tinglado derecha.

pero cuando intento acceder a un CGI sin tinglado el registro de Apache escupe:

Sin Exec CGI verbo encontrado para archivos de tipo '.cgi'

cualquier pensamiento, ideas, o incluso conjeturas salvajes serían apreciadas.

gracias.

Respuesta

9

Parece que se está ignorando la línea ScriptInterpreterSource. Si está configurado como Registry o Registry-Strict, debe ignorar las líneas shebang y usar el registro solo.

Además, el Apache 2.2 docs tienen una posición ligeramente diferente para la clave de registro:

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

verificado esto funciona para Apache 2.2.11 (Win32) con mod_perl 2.0.4 y v5.10.0 Perl – shufler

+0

Esto fija mi problema, pero, he encontrado que el uso de la 'interruptor T' puede causar problemas con mayor código (por ejemplo, hace que '@ INC' no tenga en cuenta las rutas relativas). –

+0

Obras verificadas para Win2K3 Apache 2.2.17, ActivePerl 5.12.4 – PseudoNinja

0

En lugar de ejecutar su código Perl CGI en procesos separados, considere el uso mod_perl (Ver http://perl.apache.org).

Mod_perl es mucho más eficiente, ya que el código de Perl se carga y analiza solo una vez y luego se ejecuta directamente dentro de los procesos de Apache sin necesidad de iniciar o comunicarse con otros procesos.

0

Esto también funciona para los scripts de Python. Hice lo siguiente para arreglar mi instalación de Apache para ignorar el requisito de shebang en mis scripts. Sin esto, se requiere shebang en la versión actual de Apache 2.4, o al menos estaba en la mía.

# 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 
Cuestiones relacionadas