Este es un problema de Apache/Perl que estoy teniendo.Perl CGI Scripts no puede encontrar módulos en la biblioteca
Estoy usando un módulo de CPAN en mi aplicación perl CGI. Es Spreadsheet :: ParseExcel
He instalado el módulo cpan con archivos tar.gz.
He instalado las dependencias.
Sin embargo, lo hice como usuario no root. La biblioteca que contiene estos archivos se encuentra en una carpeta de usuario,/home/user/lib
Ahora, he configurado Apache2 correctamente en este cuadro. El directorio html es/var/www/html y la carpeta cgi es/var/www/html/cgi-bin. He verificado que funcionan porque todas las secuencias de comandos en esa carpeta que no requieren los módulos especiales funcionan en mi navegador Firefox, es decir. hola mundo, volcados de datos, formas simples.
Sin embargo, cuando intento ejecutar los scripts que usan "Spreadsheet :: ParseExcel", aparece el error de que el módulo no se puede encontrar en @INC. Sin embargo, tengo una instrucción "use lib" al comienzo del script que agrega la biblioteca.
Los scripts se pueden ejecutar en PUTTY sin problemas. Solo cuando ejecuto el script desde el navegador me sale el problema.
Esta aplicación web se escribió en otra caja y funciona bien en esa caja. Porque me desarrollé allí por supuesto. Puse Apache2 en mi máquina personal de Ubuntu, e instalé la aplicación web y los módulos aquí, y funciona en mi caja local.
He configurado "chmod -R a + rx" en la carpeta de la biblioteca del usuario, por lo que creo que Apache tiene acceso a la carpeta, a menos que la configuración del directorio principal lo esté bloqueando. No tengo que ejecutar eso en la carpeta/home/user, o peor, la carpeta/home, ¿verdad?
¿Alguna idea del problema?
¡Gracias a todos por su tiempo!
El primer directorio enumerado en el error @INC es el directorio de la biblioteca en cuestión. No estoy seguro de qué usuario apache está utilizando para intentar acceder a los archivos 'nadie' o 'www-usuario', pero me inclino por un problema de permisos. Sí, toda la biblioteca tiene permisos r-x para propietario, grupo y usuarios. – bleutyler
No solo el directorio del módulo. Por ejemplo, si el módulo es /home/tydel/lib/perl/Net/BoogieTime.pm, cada directorio desde/hacia arriba requeriría o + rx como mínimo.Esto incluye/home,/home/tydel,/home/tydel/lib,// home/tydel/lib/perl,/home/tydel/lib/perl/Net, y por último/home/tydel/lib/perl/Net /BoogieTime.pm necesitará o + r. Espero que ayude. –