Динамическая загрузка упаковки под плак -пе с Starman
Вопрос
Я запускаю веб -приложение под Plackup со Starman и пытаюсь динамически загрузить и создавать экземпляры пакеты на основе запросов пользователей. Я использую «Требуй $ PackageName;»; Чтобы загрузить пакет, где $ packageName содержит имя пакета, имена хранятся в файле конфигурации. Затем я выполняю известный набор команд в экземпляре, поскольку все классы наследуют от базового класса и содержат набор известных методов.
Это прекрасно работает в Apache, но по какой -то причине PlackUp говорит, что не может найти пакет, хотя @INC содержит путь библиотеки, а имена пакетов абсолютны из последнего каталога на пути LIB. То есть имя пакета будет базовым :: my :: package.
Кто -нибудь испытает эту проблему? Мне нужно обновить какой -то другой путь в Starman? Я выполняю PlackUp с флагом -i, а также обновляю переменную среды Perl5lib. Я также пытался 'use lib /...'
В основном классе приложения, но ни одна из этих работ.
Спасибо
Решение
require
Примет только имена модулей (например, Scalar :: util), когда они указаны как голые слова. Если вы дадите require
Строка, тогда она должна быть относительным путем к модулю (например, Scalar/util.pm). Вы можете обойти это, сделав require
внутри eval
(строковая параметром форма eval
), например eval "require $package"
.