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

È stato utile?

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

Consulta la lista dei moduli installati in macchina

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top