2012-01-11 1 views
0

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

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

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

Благодаря

+0

Пример: 'Starman -e'my $ пакет = "Шаблон"; требуется пакет $; my $ t = $ package-> new; return [200, ["Content-Type" => "text/plain"], ["ok"]]; '' – daxim

+0

Это более или менее пример того, что не работает. – MadHacker

+0

eval "использовать $ package"; сделал трюк – MadHacker

ответ

1

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

См Check the list of module installed in machine

Смежные вопросы