Carga dinámica de paquetes bajo plackup con Starman
Pregunta
Estoy corriendo una aplicación web bajo plackup con starman y tratando de cargar dinámicamente y crear instancias de paquetes basados en las solicitudes del usuario.Estoy usando 'requieren $nombrepaquete;' para cargar el paquete en $packageName contiene el nombre del paquete, los nombres se almacenan en un archivo de configuración.Yo, a continuación, ejecutar un conocido conjunto de comandos en la instancia como todas las clases heredan de una clase base y contienen un conjunto de métodos conocidos.
Esto funciona muy bien en Apache, pero por alguna razón plackup está diciendo que no puede encontrar el paquete aunque @INC contiene la ruta de la biblioteca y los nombres de los paquetes son absolutos desde el último directorio en el lib camino.Es decir, el nombre del paquete sería la Base::Mi::Paquete.
Cualquier persona que experimente este problema?Necesito actualizar alguna otra ruta de acceso dentro de Starman?Yo soy la ejecución de plackup con el parámetro-I, así como la actualización de mi entorno PERL5LIB variable.También probé 'use lib /...'
en la aplicación principal de la clase, pero ninguno de estos trabajos.
Gracias
Solución
require
Solo aceptará nombres de módulos (por ejemplo, Scalar :: Util) cuando se especifican como palabras desnudas. Si das require
una cadena, entonces debe ser una ruta relativa al módulo (por ejemplo, Scalar/Util.pm). Puedes evitar esto haciendo el require
dentro de un eval
(la forma de parámetro de cadena de eval
), p.ej eval "require $package"
.