无法在@INC中找到模块main的可加载对象

时间:2017-01-20 16:16:38

标签: apache perl mod-perl

在一段时间内运行在ubuntu 16.04上的mod_perl应用程序中,一切运行正常(几天)后,我们在错误日志中收到致命消息:

  

无法解析处理程序MyHandler::ModPerl20无法在@INC中找到模块main的可加载对象

MyHander :: ModPerl20在位置块中定义

<Perl>
     unshift @INC, '/path/to/my/code';
</Perl>
<Location ~ "/imp($|/)">
    SetHandler modperl
    PerlResponseHandler MyHandler::ModPerl20
</Location>

ubuntu Perl版本是5.22。 Apache 2.4

这可能是问题吗? http://blog.feature-addons.de/2016-05-15-otrs-apache-mod-perl-perl-5-22

任何想法如何解决这个问题?我真的需要设置nginx / uwsgi吗?

4 个答案:

答案 0 :(得分:2)

确保@INC设置正确,以便找到安装MyHandler::ModPerl20的路径(我认为当Apache回收一些孩子的时候会发生新的事情正确的@INC值,因此不再找到您的模块。

尝试添加一个 在httpd.conf中PerlSwitches -I/your/path/for/myhandler/看看它是否解决了你的问题。

如果这会改变一切,请查看modperl文档中的Adjusting @INC以查看所有详细信息。

答案 1 :(得分:0)

我见过其他类似的东西,不仅是SAS,还有其他产品。

我会请求您的系统管理员检查Linux服务器中的IO模块。我认为他们需要重新安装,或者只是检查相关文件夹上的授权。

答案 2 :(得分:0)

将MPM Apache配置从mpm_event更改为mpm_prefork解决了我的问题。

答案 3 :(得分:-1)

我敢打赌你的代码使用CGI.pm,这就是导致它崩溃的原因。运行不带CGI.pm的代码,代码永远不会崩溃。

我怀疑Perl脚本引发了内存包装,服务器不得不恐慌(CGI.pm等可能导致这种情况)。 所以Perl代码中有一个地方无法正确处理某种情况。

如果无法看到您的代码,我只能猜测从这里开始做什么..但您可以尝试在配置中启用警告PerlWarn onPerlSwitches -W,使用严格,警告,添加记录Perl的所有警告和死亡错误的文件。