【问题标题】:Can apache DocumentRoot change perl @INC?apache DocumentRoot 可以更改 perl @INC 吗?
【发布时间】:2019-08-15 11:48:05
【问题描述】:

我注意到,如果我在 VirtualHost apache2 配置中更改 DocumentRoot,则 perl @INC 也会从

/opt/perl/lib/perl5/site_perl/5.28.0/x86_64-linux 
/opt/perl/lib/perl5/site_perl/5.28.0 
/opt/perl/lib/perl5/5.28.0/x86_64-linux 
/opt/perl/lib/perl5/5.28.0 

/var/www_local/WWWHub 
/var/www_local/WWWHub/work
/etc/perl
/usr/local/lib/x86_64-linux-gnu/perl/5.22.1/
/Usr/local/share/perl/5.22.1 
/usr/lib/x86_64-linux-gnu/perl5/5.22 
/usr/share/perl5 
/usr/lib/x86_64-linux-gnu/perl/5.22 
/usr/share/perl/5.22 
/usr/local/lib/site_perl
/usr/lib/x86_64-linux-gnu/perl-base

因此,如果 CGI 脚本具有 CPAN 模块依赖项,它将无法正确运行。

为什么会发生?

【问题讨论】:

  • 看起来您的服务器上有两个 Perl 安装,即更改 DocumentRoot 更改了执行 CGI 脚本的 Perl 二进制文件。我有根据的猜测是您将 Perl 5.28.1 安装为 /opt/perl/bin/perl 并将 Perl 5.22.1 安装为 /usr/bin/perl

标签: perl apache2 cgi


【解决方案1】:

你似乎有两个不同的问题。

当您想使用您的 Perl 5.22.1 版本时,您正在使用您的 Perl 5.28.0 版本。

要解决此问题,请调整脚本的 shebang (#!) 行以引用正确的 Perl 版本。

例如,您可能正在使用

#!/opt/perl/bin/perl

你可能想要使用的是

#!/usr/bin/perl

您希望找到安装在相对于脚本位置的模块。

脚本应该使用use lib 和相对于$RealBin 的路径。

use FindBin qw( $RealBin );
use lib $RealBin, "$RealBin/work";

(我假设脚本在/var/www_local/WWWHub。)

【讨论】:

    猜你喜欢
    • 2015-11-14
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2021-01-30
    • 2015-11-23
    • 2019-02-13
    • 2014-12-30
    相关资源
    最近更新 更多