Уважаемые коллеги!
Ни для кого не секрет, что при разработке обработчиков (handlers) mod_perl приходится использовать специальный модуль перекомпиляции обработчика при его изменении. Я активно использую Apache::StatINC для этих целей (у меня он работает гораздо надежнее, чем Apache::Reload). Имена модулей, загруженных и скомпилированных при помощи use(), require() или do() заносятся в хеш %INC. Apache::StatINC проверяет дату изменения файлов из %INC и перекомпилирует модули, если произошли изменения. Проблема в том, что модули, скомпилированные при запуске Apache при помощи PerlModule в хеш %INC не попадают, и не перекомпилируются при изменении. Раньше боролся с этой проблемой простым исключением дорабатываемого модуля из PerlModule в конфигурации сервера разработки. Но вчера возникла новая проблема: начал разрабатывать модуль, в котором функции используются в качестве разных обработчиков.
| Код | # фрагмент httpd.conf PerlModule MySite::MyModule
<Location /loc1> SetHandler perl-script PerlHandler MySite::MyModule::func1 </Location>
<Location /loc2> SetHandler perl-script PerlHandler MySite::MyModule::func2 </Location>
|
Если MyModule убрать из PerlModule, Apache перестает вызывать функции 1 и 2 с сообщением, что они не видны. Пришлось воспользоваться "грязным хаком" (вручную добавляем нужный модуль в %INC):
| Код | # фрагмент httpd.conf <Perl> $INC{'MySite/MyModule.pm'} = '/path/to/MySite/MyModule.pm'; </Perl>
|
Может кто предложит нормальное (красивое) решение? |