2011-01-25 24 views
5

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!

Respuesta

1

Dos pensamientos aquí:

  1. ¿Cuál es el @INC se dice en el error acerca de los módulos que faltan, ¿incluye el camino que ha añadido a través de use lib?
  2. ¿El usuario que ejecuta Apache tiene acceso a este directorio? Muy a menudo, los directorios principales tienen permisos que niegan el cruce por otras cuentas. Verifique los permisos desde el directorio del módulo hasta el final, asegúrese de que tenga r-x como mínimo para todos los directorios y archivos de su módulo.
+0

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

+0

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. –

3

El usuario de Apache no puede acceder a/home/user/lib si no tiene acceso a/home/user, incluso si los permisos en/home/user/lib le permiten acceder a él.

Por ejemplo, si posee un archivo en/raíz, aún no puede acceder a él si no tiene acceso a/root.

+0

Aha, ya veo. Gracias por señalar esto. Por lo tanto, debe ser mejor colocar la biblioteca para los módulos perl en algo como/usr/local/lib! – bleutyler

+0

@ user589905: ... o simplemente haga '/ home/user /' world-legible/world-executable ('drwxr-xr-x'). En la gran mayoría de los casos, la capacidad de compartir datos en su directorio personal es mucho más importante que hacer que todo allí sea estrictamente privado (especialmente dado que puede crear un subdirectorio privado para la cantidad generalmente pequeña de datos que realmente son sensibles). –

+0

Me enfrenta un problema similar, esta solución funcionó para usted, porque no fue para mí. Revisé todo el permiso de la carpeta, el acceso del usuario, pero todavía estoy enfrentando este problema. –

Cuestiones relacionadas