我正在尝试使用ModPerl::Registry
将CGI脚本迁移到mod_perl
。
脚本使用与脚本位于同一目录中的模块,但由于mod_perl
当前目录位于其他位置,因此无效。
我尝试使用FindBin
添加到@INC
,但这是FindBin
的样子:
$FindBin::Bin: /usr/sbin
$FindBin::Script: httpd
根本没用。
那么,有没有办法让脚本找出它的位置,并将该目录添加到@INC
?理想情况下,使用相同Apache服务器的所有其他脚本都不会将该目录添加到@INC
。
答案 0 :(得分:5)
use File::Basename;
use lib dirname( __FILE__ );
答案 1 :(得分:2)
在你的httpd.conf中,在顶部附近添加以下行:
PerlRequire /location/of/this/script/startup.pl
然后在startup.pl中,指定所需的模块,如下所示:
use lib qw(/location/of/module1 /location/of/module1);
1;
和Presto!
答案 2 :(得分:1)
对于每个脚本,您是否有单独的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>
答案 3 :(得分:1)
请看lib::abs。它将相对路径转换为绝对路径,并且可能适合在mod_perl下使用。