Dynamisches Paket Laden unter Plackup mit Starman
Frage
Ich mache eine Web -App unter Plackup mit Starman aus und versuche, Pakete dynamisch zu laden und zu instanziieren, basierend auf Benutzeranfragen. Ich benutze 'Erfordernde $ packageName'; Um das Paket zu laden, bei dem $ Packagename den Namen des Pakets enthält, werden die Namen in einer Konfigurationsdatei gespeichert. Ich führe dann einen bekannten Satz von Befehlen in der Instanz aus, wenn alle Klassen aus einer Basisklasse erben und eine Reihe von bekannten Methoden enthalten.
Dies funktioniert unter Apache gut, aber aus irgendeinem Grund sagt Plackup, dass es das Paket nicht finden kann, obwohl @inc den Bibliotheksweg enthält und die Paketnamen vom letzten Verzeichnis im Lib -Pfad absolut sind. Das heißt, der Paketname wäre Basis :: My :: Paket.
Erlebt jemand dieses Problem? Muss ich einen anderen Weg innerhalb von Starman aktualisieren? Ich führe Plackup mit dem -i -Flag aus und aktualisiere meine Umgebung Perl5Lib -Variable. Ich habe es auch versucht 'use lib /...'
in der Haupt -App -Klasse, aber keine dieser Arbeiten.
Vielen Dank
Lösung
require
Akzeptiert nur Modulnamen (z. B. scalar :: util), wenn sie als BareWords angegeben sind. Wenn du gibst require
Eine Zeichenfolge, dann muss es sich um einen relativen Pfad zum Modul handeln (z. B. scalar/util.pm). Sie können das umgehen, indem Sie das tun require
Inneren ein eval
(die Form der String-Parameter-Form von eval
), z.B eval "require $package"
.
Sehen Überprüfen Sie die Liste des in Maschine installierten Moduls