sql - ¿Por qué mi script Perl CGI no puede encontrar Oracle DBD?
dbd:: oracle (3)
DBD y Oracle Masters:
Tengo una aplicación web de Perl que se está comportando de manera extraña. Lo estoy usando para leer algunas cosas de un DB de Oracle e informar. Tengo instalada la versión 11.1.0.6.0 del cliente instantáneo de Oracle. Me estoy ejecutando en WinXP y tengo la variable de entorno PATH configurada para la ubicación del cliente instantáneo. Tengo Apache2 para mi servidor web.
Aquí está el problema: cuando ejecuto la aplicación desde una línea de comando, funciona sin problemas. Sin embargo, cuando corro desde http://127.0.0.1/cgi-bin/a.cgi , obtengo el siguiente error de acceso a la base de datos:
install_driver(Oracle) failed: Can''t load ''C:/usr/lib/auto/DBD/Oracle/Oracle.dll'' for module DBD::Oracle: load_file:The specified module could not be found at C:/usr/lib/DynaLoader.pm line 202. at (eval 9) line 3
La intuición me dice que es un problema de permiso, pero no estoy seguro de dónde buscar más. ¿Alguien puede arrojar algo de luz sobre esto? Agradecería cualquier ayuda.
Gracias, Saker Ghani
El hecho de que el error muestre la ruta completa de .DLL sugiere que el sistema no está teniendo problemas para encontrar el archivo DLL, por lo que respalda su teoría de que los permisos de archivo son el problema.
Para comprobar si realmente se trata de un problema de permisos, intente escribir una secuencia de comandos CGI Perl trivial que no hace más que abrir directamente ese archivo .DLL específico (con una llamada open
normal) e informa si funcionó o no.
Gracias Alnitak. Intenté hacer lo que sugeriste, y ''abrir'' abrió con éxito ''C: /usr/lib/auto/DBD/Oracle/Oracle.dll''. Recuerdo haber visto este error exacto cuando estaba desarrollando en una máquina diferente, pero eso se debía a que las librerías de Oracle Instant Client se estaban equivocando. Después de instalarlos y establecer la variable ''Ruta'', todo comenzó a funcionar bien.
He tenido el mismo problema, cuando al acceder al programa cgi perl a través de la interfaz, me informaba del error "Install_driver (Oracle) failed: No se puede cargar ''C: /Perl/lib/auto/DBD/Oracle/Oracle.dll'' para módulo DBD :: Oracle: archivo_carga: acceso denegado en la línea C: /Perl/lib/DynaLoader.pm 201 ".
Estaba usando Perl 5.10 en Windows 2003 Server con IIS 6.
La resolución era dar los permisos en el directorio de Perl a "Todos", así como a la carpeta de instalación de Oracle.