May 25th, 2009

Распорядок дня.

Утром - запахи стали и карболита под звук дрели, ножовки и болгарки.
Днём - аромат жареной свинины вприкуску с чилийским красным вином.
Вечером - апач с тоном PERLа под соусом mod_perl.
Ночью - гадкая вонь PHP и CMS netcat.

Perl, mod_perl и одна небольшая удача.

Расписавшись в собственном бессилии с вторым апачем community.livejournal.com/ru_perl/316505.html, сел разбираться с первым.

Итак, PerlRequire через .htaccess МОЖЕТ вызвать use lib ... - и те библиотеки будут загружены и пригодны как ResponceHandler, что и требовалось. Однако, доступны эти библиотеки будут только один раз - при первом запуске - "компиляции" скрипта. Если __ВСЕ__ библиотеки были использованы - удача; если нет - при втором запуске их не достучаться (могут потребоваться в коде внутри eval "...") - @INC сбрасывается на значение по-умолчанию.

Так как я делал именно CMS, то такая задача - загрузить произвольный код (или транслировать шаблон в код и загрузить результат, что в общем-то то же самое) - возникает сплошь и рядом; поведение сайта выглядит очень своеобразным - процессов сервера несколько, иногда выполняется новый, иногда - повторно уже запускавшийся. Код (у меня был код шаблона) кэшируется, но, устарев, выпадает из кэша и больше не может загрузиться. При переходе по ссылке - 50/50, динамические картинки - когда как и много подобных весёлых вещей.

Решение оказалось простым - при первом запуске use lib ... уже работает, при последующих - вызываю eval "use lib ..." - с пижонской переменной $firstRun для предотвращения лишнего на первом запуске.

В итоге, не нужно быть админом, чтобы прикрутить CMS к первому апачу как модуль mod_perl - эх, ещё бы и для второго так...

(во втором работает или startup.pl из конфига апача или cgi под mod_perl - с такими же приседаниями с @INC)