Динамическая загрузка пакетов при загрузке с Starman - PullRequest
0 голосов
/ 11 января 2012

Я запускаю веб-приложение в пакете с starman и пытаюсь динамически загружать и создавать экземпляры пакетов на основе пользовательских запросов.Я использую 'require $ packageName;'чтобы загрузить пакет, где $ packageName содержит имя пакета, имена хранятся в файле конфигурации.Затем я выполняю известный набор команд в экземпляре, поскольку все классы наследуются от базового класса и содержат набор известных методов.

Это прекрасно работает под Apache, но по какой-то причине plackup говорит, что не может найти пакет, даже если @INC содержит путь к библиотеке и имена пакетов являются абсолютными по сравнению с последним каталогом в пути lib.То есть имя пакета будет Base :: My :: Package.

Кто-нибудь сталкивался с этой проблемой?Нужно ли мне обновить какой-то другой путь в Starman?Я выполняю раскладку с флагом -I, а также обновляю переменную среды PERL5LIB.Я также пробовал 'use lib /...' в главном классе приложения, но ничего из этого не работает.

Спасибо

1 Ответ

1 голос
/ 11 февраля 2012

require будет принимать имена модулей (например, Scalar :: Util) только в том случае, если они указаны как голые слова. Если вы указываете require строку, то это должен быть относительный путь к модулю (например, Scalar / Util.pm). Вы можете обойти это, выполнив require внутри eval (форма строкового параметра eval), например, eval "require $package".

См. Проверьте список установленных на машине модулей

...