Не удается найти загружаемый объект для модуля main в @INC
в приложении mod_perl, работающем на ubuntu 16.04, через некоторое время, когда все работает нормально (несколько дней), мы получаем фатальное сообщение в errorlog:
не удалось решить обработчик
MyHandler::ModPerl20
Не удается найти загружаемый объект для модуля main в @INC
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 ответов
убедится @INC
настроен правильно, чтобы найти путь, в котором MyHandler::ModPerl20
установлен (Я думаю, что происходит, когда Apache перерабатывает какой-то ребенок, тот, кто начинает новый, не имеет правильного @INC
значение, следовательно, больше не найти ваш модуль).
попробуйте добавить
PerlSwitches -I/your/path/for/myhandler/
в httpd.conf, чтобы увидеть, если он устраняет вашу проблему.
если это что-то меняет, посмотрите на настройка @INC в документации modperl, чтобы увидеть все подробности.
Я видел что-то подобное и в других случаях, не только с SAS, но и с другими продуктами.
Я бы попросил вашего системного администратора проверить модули ввода-вывода на вашем сервере Linux. Я думаю, что им нужно переустановить или, возможно, просто проверить разрешения на относительные папки.
держу пари, ваш код использует CGI.pm
и это то, что вызывает его к краху. Запустите код без CGI.pm
и код не рухнет.
Я подозреваю, что сценарий Perl вызвал обертку памяти, и сервер должен был паниковать (CGI.pm среди прочего может вызвать это). Таким образом, в коде Perl есть место, которое не обрабатывает определенную ситуацию должным образом.
не будучи в состоянии видеть ваш код, я могу только догадываться, что делать дальше.. Но ты можешь попробовать. включение предупреждения PerlWarn on
или PerlSwitches -W
в конфигурации используйте strict, warning, добавьте файл, который регистрирует все предупреждения Perl и умирает ошибки.