2010-10-22 1 views
5

Я недавно создал новую систему и хотел установить Padre, чтобы проверить это. Инструкции по установке Padre, специально предназначенные для установки local :: lib, поэтому я сделал это (хотя я никогда не нуждался в этом раньше). Затем я пошел по пути установки нескольких других модулей, запустив CPAN из моей обычной учетной записи пользователя с помощью sudo, чтобы обработать требуемые root части установки.Как установить модуль CPAN на весь сайт, пока присутствует локальный :: lib?

Затем пришло время проверить одно из веб-приложений, которые эти модули были необходимы для поддержки, и вот, Apache не смог их найти. Они нагрузили отлично из командной строки и быстрый взгляд в ~/perl5 подтвердил мое подозрение, что местные :: Lib угнал моих сессий CPAN и установили эти модули там, а не в месте на веб-узле, несмотря на мой CPAN конфигурации, включая

makepl_arg   [INSTALLDIRS=site] 
mbuildpl_arg  [--installdirs site] 

Что мне нужно сделать для моей конфигурации CPAN, чтобы модули были установлены на сайт, даже если установлен локальный :: lib? Или Падре будет работать без него, и я могу просто удалить локальный :: lib целиком? не

не хотите любые модули, установленные под ~/perl5, если падре не настаивает на их быть там. Мой код в стадии разработки имеет свои собственные местоположение каталогов конкретных проектов и все остальное должно быть на веб-узле. У меня нет необходимо для частного местоположения, предназначенного для ловли.)

+1

Что делает 'какой perl'-шоу?Если это что-то другое, кроме '/ usr/bin/perl', вы можете просто вызвать'/usr/bin/perl -MCPAN -e shell'. –

+0

Хорошая мысль, но она показывает '/ usr/bin/perl'. –

ответ

8

Got it. В соответствии с инструкциями на local::lib's CPAN page, я установил export PERL_MM_OPT='INSTALL_BASE=~me/perl', что переопределяло настройку в моей конфигурации CPAN. Быстрый export PERL_MM_OPT= вернул меня в правильное место установки.

С одной стороны, это то, что я получаю за следование инструкциям. С другой стороны, я ожидал бы o conf, чтобы показать фактические настройки конфигурации, которые используются, а не те, которые находятся в сохраненной конфигурации CPAN (даже если переменная среды переопределяет их).

+1

Вот почему я думаю, что местные :: lib, perlbrew и т. Д., Хотя технически хорошие, социально плохи. Это должно облегчить людям, которые уже понимают этот процесс, а не сделать так, чтобы вы могли игнорировать то, что он делает для вас. –

+1

* долгое молчание * согласился, я закончил тем, что вытащил свои волосы из-за проблемы с сервером, при этом модули не обновлялись должным образом для пользователя, выяснилось, что это связано с тем, что в учетной записи был локальный :: lib, а модули только обновлялись по всей системе. Теперь я обречен примерно на 4 года (длина, на которую мне потребовалась реакция на этот пост), чтобы вернуть мои волосы в соответствующие фолликулы. – osirisgothra

0

Основано на this comment, кажется, что local::lib устанавливает собственную версию CPAN.pm. Если это так, вам может потребоваться найти оригинальный CPAN.pm и убедиться, что он загружен при запуске вашей оболочки CPAN. Что-то вроде:

perl -I /usr/lib/perl5 -MCPAN -e shell 

может это сделать. Вы также можете найти perl -V, чтобы узнать, что включает путь, используемый компилятором Perl для своих модулей.

+0

Нет, модули все еще устанавливаются под '~/perl5' даже с' -I/usr/lib/perl5' и все каталоги под '~/perl5' удалены из @INC. –

+0

ОК, это скажет вам, какой модуль CPAN.pm загружается: 'perl -MCPAN -le 'print $ INC {" CPAN.pm "}'' Что он печатает? – Tim

+0

'/ usr/share/perl/5.10/CPAN.pm' –

1

Быстрый экспорт PERL_MM_OPT = вернул меня в правильное место установки.

Это не помогло мне, когда я попытался установить Starman по всему миру. Я должен был изменить /root/.bashrc комментировать (или удалить) следующие строки:

  1. экспорт PERL_LOCAL_LIB_ROOT = "$ PERL_LOCAL_LIB_ROOT:/корень/perl5";
  2. export PERL_MB_OPT = "- install_base/root/perl5";
  3. export PERL_MM_OPT = "INSTALL_BASE =/root/perl5";
  4. export PERL5LIB = "/ root/perl5/lib/perl5: $ PERL5LIB";
  5. export PATH = "/ root/perl5/bin: $ PATH";