如何在mod_perl中添加特定于脚本的lib路径?

时间:2009-07-22 14:21:47

标签: perl apache mod-perl mod-perl-registry

我正在尝试使用ModPerl::Registry将CGI脚本迁移到mod_perl

脚本使用与脚本位于同一目录中的模块,但由于mod_perl当前目录位于其他位置,因此无效。

我尝试使用FindBin添加到@INC,但这是FindBin的样子:

$FindBin::Bin: /usr/sbin
$FindBin::Script: httpd

根本没用。

那么,有没有办法让脚本找出它的位置,并将该目录添加到@INC?理想情况下,使用相同Apache服务器的所有其他脚本都不会将该目录添加到@INC

4 个答案:

答案 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)

对于每个脚本,您是否有单独的LocationDirectory,还是他们都住在同一个地方?如果是前者,我会使用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下使用。