loading pacchetto dinamico sotto plackup con Starman
Domanda
Sono in esecuzione una web app sotto plackup con Starman e cercando di caricare in modo dinamico e pacchetti istanziare in base alle richieste degli utenti. Sto usando 'richiedere $ packageName;' per caricare il pacchetto in cui $ packageName contiene il nome del pacchetto, i nomi vengono memorizzati in un file di configurazione. Sono quindi eseguire una serie nota di comandi per l'istanza come tutte le classi ereditano da una classe base e contengono una serie di metodi noti.
Questo funziona bene sotto Apache, ma per qualche ragione plackup sta dicendo che non è possibile individuare il pacchetto anche se @INC contiene il percorso biblioteca e i nomi dei pacchetti sono assoluti dall'ultima directory nel percorso lib. Vale a dire, il nome del pacchetto sarebbe Base :: Il mio :: pacchetto.
Chiunque esperienza questo problema? Ho bisogno di aggiornare qualche altro percorso all'interno Starman? Sto eseguendo plackup con la bandiera -I così come aggiornare il mio variabile di ambiente PERL5LIB. Ho anche provato 'use lib /...'
nella classe applicazione principale, ma nessuno di questi lavori.
Grazie
Soluzione
require
accetterà solo i nomi dei moduli (ad esempio Scalar :: Util) quando sono specificati come bareword. Se si dà require
una stringa, quindi ha bisogno di essere un percorso relativo al modulo (ad esempio Scalar / Util.pm). È possibile aggirare il problema facendo la require
all'interno di un eval
(sotto forma di stringa-parametro eval
), ad esempio, eval "require $package"
.