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

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top