Может ли apache DocumentRoot изменить perl @INC? - PullRequest
1 голос
/ 25 марта 2019

Я заметил, что при изменении DocumentRoot в моей конфигурации VirtualHost apache2 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, он не будет работать правильно.

Почему это могло произойти?

1 Ответ

0 голосов
/ 25 марта 2019

У вас две разные проблемы.

Вы используете свою сборку Perl 5.28.0, когда хотите использовать свою сборку Perl 5.22.1.

Чтобы исправить это, настройте строку сценария 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.)

...