Модуль не найден, несмотря на то, что он находится в @INC

Perl жалуется, что не может найти модуль, который находится прямо в @INC.

Can't locate <module> in @INC (@INC contains etc.)

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

Любые предложения о том, что еще это может быть?

Как и просили в комментариях, добавляю дополнительную информацию:

В одном из моих контроллеров Catalyst я «использую» модуль, внешний по отношению к приложению Catalyst: Template::Plugin::I18n. Я получаю следующую ошибку:

Can't locate Template::Plugin::I18n in @INC (@INC contains:  
  /webroot/www-dev/sonnet/lib    /usr/local/lib/perl5/5.12.4/BSDPAN
  /usr/local/lib/perl5/site_perl/5.12.4/mach /usr/local/lib/perl5/site_perl/5.12.4
  /usr/local/lib/perl5/5.12.4/mach /usr/local/lib/perl5/5.12.4 . /usr/local) at 
  /webroot/www-dev/sonnet/lib/Sonnet/Controller/Pubs.pm line 647.

Модуль находится по адресу /webroot/www-dev/sonnet/lib/Template/Plugin/I18n.pm с теми же разрешениями, что и остальная часть приложения.


person Phil Mitchell    schedule 09.02.2012    source источник
comment
Возможно, вам следует поделиться некоторыми подробностями о вашей настройке.   -  person TLP    schedule 09.02.2012
comment
Не зная немного больше информации, никто не сможет дать вам окончательный ответ. Замечу, что я столкнулся с похожими проблемами, и основной причиной их появления был SELinux. Дополнительную информацию см. в этом сообщении блога.   -  person StudyOfCrying    schedule 09.02.2012
comment
Я не совсем уверен, чем поделиться ... Я спросил, потому что я немного растерялся. Сервер работает: Apache/2.2.21 (FreeBSD) mod_ssl/2.2.21 OpenSSL/0.9.8e DAV/2 mod_perl/2.0.5 Perl/v5.12.4. Спасибо за предложение SELinux ... Я рассмотрю это.   -  person Phil Mitchell    schedule 09.02.2012
comment
Вы говорите свои выводы (модуль тут как тут, @INC выставлен правильно), а мы вместо этого хотим непредвзятых наблюдений. Скорее всего, вы что-то неправильно понимаете, и, посмотрев исходные данные, мы сможем найти проблему. Отредактируйте вопрос, чтобы добавить информацию: дамп @INC, возможно, perl -V; как именно вы добавили/установили модуль, как он загружается в приложение Catalyst, как выглядит релевантное дерево файловой системы, где находится модуль.   -  person daxim    schedule 09.02.2012
comment
Вы также получите эту ошибку, если пользователь, от имени которого запускается скрипт, не имеет разрешения на доступ к файлу .pm (либо потому, что у него нет доступа к самому файлу .pm, либо потому, что у него нет доступа к одному из файлов .pm). его родительских каталогов).   -  person ikegami    schedule 09.02.2012


Ответы (1)


Ну, это неудобно. У меня был случайный оператор «require», в котором имя пакета было заключено в кавычки! Это вызывало ошибку, хотя оператор также был ненужным. Слишком много ночного кодирования. Извините за отвлечение. Все ваши предложения очень ценятся!

person Phil Mitchell    schedule 09.02.2012