【问题标题】:Custom Perl Modules on Apache2 ServerApache2 服务器上的自定义 Perl 模块
【发布时间】:2012-06-16 23:57:36
【问题描述】:

目前,我正在尝试在带有 WebUI 的 Perl 程序中使用一堆自定义 perl 模块,test.pm 作为其中之一。我在安装了 Apache2 的 Windows 7 机器上运行它。当我使用 perl test.pl 在 cmd 提示符下运行程序时,程序运行良好。但是在 Apache 上运行它会给我这个错误。

[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm
[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm

我用过:

foreach $key (sort keys(%ENV)) {
  print "$key = $ENV{$key}<p> \n";
}

在路径变量下,我确实看到了所有模块所在的文件夹。还有其他地方我应该用来添加到 Perl 路径吗?

另外添加 use lib "C:\testpm\";我的代码只将@INC 更改为

(@INC contains: C:\testpm\ C:/Perl/lib C:/Perl/site/lib .)

您是否需要做一些额外的事情来添加路径以在 apache 服务器上运行自定义 perl 模块?

基于答案的解决方案: 我发现这个效果最好。在我的 httpd-perl.conf 文件中,我添加了以下几行:

<IfModule env_module>
    SetEnv PERL5LIB "C:\testpm;C:\testpm1;"
</IfModule>

(以 C:\testpm1 扩展,向有类似问题的人展示如何添加更多模块文件夹。)

【问题讨论】:

    标签: perl apache


    【解决方案1】:

    PATH 环境变量与 perl 从哪里加载模块没有关系,即@INC。您说您的路径在@INC 中,但在您显示的错误消息中,它不是。

    Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at
    

    您应该在服务器启动期间调用use lib。见http://perl.apache.org/docs/2.0/user/handlers/server.html#Startup_File

    另外,请尝试删除尾部斜杠,例如use lib 'C:\testpm'

    【讨论】:

      【解决方案2】:

      使用 lib 很好,如果你可以添加到安装文件中,否则你将不得不在每个 perl 脚本文件中添加它。你可以使用 PERL5LIB而不是这样做> 环境变量。

      perl 中的

      @INC 不获取 PATH 环境变量的值,而是可以从 PERL5LIB 环境变量获取值。

      您可以在 apache 配置中添加 SetEnv PERL5LIB path_to_modules_directory 指令。执行 perl 脚本时,您的 perl 脚本会将此路径添加到原始 @INC 值的前面。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-28
        • 2019-05-27
        • 1970-01-01
        • 1970-01-01
        • 2012-11-28
        • 1970-01-01
        • 1970-01-01
        • 2017-05-21
        相关资源
        最近更新 更多