Как мне добавить специфичный для скрипта путь к библиотеке в mod_perl?
Я пытаюсь перенести сценарии CGI в mod_perl
с помощью ModPerl::Registry
,
Скрипты используют модули, которые находятся в том же каталоге, что и скрипт, но так как mod_perl
текущий каталог находится в другом месте, это не работает.
Я пытался с помощью FindBin
добавить к @INC
но вот что FindBin
похоже:
$FindBin::Bin: /usr/sbin
$FindBin::Script: httpd
Что бесполезно.
Итак, есть ли способ для сценария выяснить, где он находится, и добавить этот каталог в @INC
? В идеале, все остальные сценарии, использующие тот же сервер Apache, не добавят этот каталог в свои @INC
,
4 ответа
В вашем httpd.conf добавьте следующую строку ближе к началу:
PerlRequire /location/of/this/script/startup.pl
Затем в файле startup.pl укажите необходимые модули, например:
use lib qw(/location/of/module1 /location/of/module1);
1;
И Престо!
Посмотрите на lib:: abs. Он преобразует относительный путь в абсолютный путь и, вероятно, идеально подходит для использования в mod_perl.
У вас есть отдельный Location
или же Directory
для каждого сценария или они все живут в одном месте? Если первый, я бы использовал PerlSetEnv
Alias /apps/thisone/ /srv/http/site/apps/thisone/
<Location /apps/thisone/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
PerlSetEnv MYLIB /srv/http/site/apps/thisone/lib
Options +ExecCGI
Order allow,deny
Allow from all
</Location>
Если последнее:
Alias /apps/ /srv/http/site/apps/
<Location /apps/thisone/>
SetHandler perl-script
PerlResponseHandler ModPerl::Registry
PerlOptions +ParseHeaders
PerlSetEnv THISONE_LIB /srv/http/site/apps/thisone/lib
PerlSetEnv THATONE_LIB /srv/http/site/apps/thisone/lib
Options +ExecCGI
Order allow,deny
Allow from all
</Location>