3

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

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

我尝试使用FindBin添加到@INC,但FindBin看起来像这样:

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

这根本没有用。

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

4

4 回答 4

6
use File::Basename;
use lib dirname( __FILE__ );
于 2009-07-22T14:27:51.367 回答
2

在您的 httpd.conf 中,在顶部附近添加以下行:

PerlRequire /location/of/this/script/startup.pl

然后在 startup.pl 中,指定所需的模块,如下所示:

use lib qw(/location/of/module1 /location/of/module1); 1;

和 Presto !

于 2009-07-28T11:52:35.950 回答
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>
于 2009-07-22T14:39:26.793 回答
1

看看lib::abs。它将相对路径转换为绝对路径,可能非常适合在 mod_perl 下使用。

于 2009-07-22T17:42:48.253 回答