Почему TWiki не может найти модуль, который уже находится в @INC? - PullRequest
3 голосов
/ 10 ноября 2010

недавно я устанавливал некоторые модули perl на свой RHEL 5 с версией perl 5.8.8, и все установки прошли нормально.Я вижу, что модули существуют в @INC, но мой сайт TWiki утверждает, что он не может найти их, возвращая ошибку: Не удается найти Net / LDAP.pm в @INC (много путей, которые содержат модули) вTWiki.pm строка xx.Когда я делаю perl -e 'use Net::LDAP';, он ничего не возвращает, что означает, что Perl может найти этот модуль.Кроме того, TWiki был настроен корректно и работает нормально, за исключением плагинов, которые используют определенные модули, которые мне пришлось установить, я даже добавил пути к setLib.cfg на всякий случай.

Редактировать:

which perl возвращает /usr/bin/perl

строка Шебанга twiki/cgi-bin/view равна #!/usr/bin/perl -wT

perl -MNet::LDAP -e 'print $INC{"Net/LDAP.pm"}, "\n";' возвращает:

/usr/lib/perl5/site_perl/5.8.8/Net/LDAP.pm

Журналы ошибок Apache показывают: [Tue Nov 16 10:53:47 2010] [error] [client 10.76.14.170] [Tue Nov 16 10:53:47 2010] view: INC /usr/lib/perl5/site_perl/5.8.8 at /usr/local/apache2/htdocs/twiki5_pdc/bin/view line 44. Так что используйте правильный путь.

Ответы [ 5 ]

4 голосов
/ 10 ноября 2010

@ INC, возможно, отличается от вашей командной строки - либо потому, что вы используете другой двоичный файл интерпретатора Perl, , либо другие факторы, влияющие на @INC.

Проверьте @INC: perl -e 'print join(",", sort @INC);' в командной строке и сравните с @INC, напечатанным в упомянутой вами ошибке вашей вики.

Возможно, вам придется добавить каталоги в @INC Perl вашего веб-сервера, которые присутствуют в командной строке («как» зависит от того, используете ли вы mod_perl или нет).

3 голосов
/ 10 ноября 2010

То, что Apache считает вашим путем INC, и то, что ваш Perl из командной строки считает, что ваш путь INC - это две совершенно разные вещи. Возможно, вам придется установить переменную окружения PERL5LIB в вашей конфигурации Apache.

Я большой поклонник TWiki / FOSwiki и сталкивался с этой проблемой несколько раз в прошлом.

2 голосов
/ 10 ноября 2010
  1. Сделайте это (это работает во многих случаях):

    perldoc -l Net::LDAP
    

    Если в файле есть POD, он укажет на .pm.Тем не менее, если он указывает на файл .pod, .pm обычно находится в том же каталоге.

  2. Затем проверьте этот список после @INC( и посмотрите,путь там.Возможно, вам потребуется изменить среду, в которой работает Apache, потому что, вероятно, его там не будет.


Поскольку это не сработало для вас, это должно:

perl -MNet::LDAP -e 'print $INC{"Net/LDAP.pm"}, "\n";'

Если perl на самом деле загружает его, это скажет вам, откуда он загружается.

1 голос
/ 25 ноября 2010

Хорошо, причина была, скорее всего, в том, что я устанавливал модули perl от имени root, и они не были настроены для запуска другими, поэтому apache не мог их выполнять / использовать.

1 голос
/ 10 ноября 2010

Лошади: Вы просмотрели руководство по установке , чтобы убедиться, что все настроено правильно?

Зебры: отредактируйте bin / twiki_cgi и добавьте прямо перед $ TWiki :: engine-> run ():

warn "ENV $_ => $ENV{$_}" for sort keys %ENV;
warn "INC $_" for @INC;

grep ваш журнал ошибок apache для строк с ENV и INC. Найдите строки ENV с PERL5LIB или PERLLIB.Проверьте строки INC, чтобы убедиться в наличии каталогов, содержащих ваши библиотеки CPAN.

...