Как я могу установить DBI Perl на Mac OS X, чтобы Apache мог его найти? - PullRequest
2 голосов
/ 01 мая 2010

Я пытаюсь настроить среду разработки Perl на своем ноутбуке Mac, и мне очень трудно заставить ее работать.Я думал, что все настроено правильно, но когда я пытаюсь запустить пример сценария, он сообщает об ошибках с модулем DBI и не может получить доступ к БД.

Вот что сообщается в журналах ошибок Apache:

[Fri Apr 30 23:11:33 2010] [error] [client 127.0.0.1] Can't locate DBI.pm in @INC (@INC contains: /Library/Perl/Updates/5.10.0/darwin-thread-multi-2level /Library/Perl/Updates/5.10.0 /System/Library/Perl/5.10.0/darwin-thread-multi-2level /System/Library/Perl/5.10.0 /Library/Perl/5.10.0/darwin-thread-multi-2level /Library/Perl/5.10.0 /Network/Library/Perl/5.10.0/darwin-thread-multi-2level /Network/Library/Perl/5.10.0 /Network/Library/Perl /System/Library/Perl/Extras/5.10.0/darwin-thread-multi-2level /System/Library/Perl/Extras/5.10.0 .) at main.pm line 5.

Я загрузил и установил оба модуля вручную для работы с MAMP, используя следующие команды, как указано в этом сообщении на форуме :

For DBI

1. cd /Library/Perl/DBI-1.611 
2. sudo Perl Makefile.PL 
3. sudo make 
4. sudo make install 

For DBD

1. cd /Library/Perl/DBD-mysql-4.014 
2. sudo Perl Makefile.PL --mysql_config=/Applications/MAMP/Library/bin/mysql_config 
3. sudo make 
4. sudo make install 

Что я заметил во время работыприведенные выше команды состоят в том, что файлы, похоже, устанавливаются в каталог /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/, который, по-видимому, не является одним из каталогов поиска, которые Apacheупоминает об ошибке в начале этого поста.Вот что я вижу во время установки:

$ sudo make install
Files found in blib/arch: installing files in blib/lib into architecture dependent library tree
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/DBI/DBI.bundle
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/DBI/dbipport.h
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/DBI/DBIXS.h
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/DBI/dbixs_rev.h
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/DBI/Driver.xst
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/DBI/Driver_xst.h
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBI.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/TASKS.pod
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBD/DBM.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBD/File.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBD/Gofer.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBI/Changes.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBI/DBD.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBI/Profile.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBI/ProxyServer.pm
Installing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/DBI/PurePerl.pm
Installing /opt/local/share/man/man3/DBD::DBM.3pm
Installing /opt/local/share/man/man3/DBD::File.3pm
Installing /opt/local/share/man/man3/DBD::Gofer.3pm
Installing /opt/local/share/man/man3/DBI.3pm
Installing /opt/local/share/man/man3/DBI::DBD.3pm
Installing /opt/local/share/man/man3/DBI::Profile.3pm
Installing /opt/local/share/man/man3/DBI::ProxyServer.3pm
Installing /opt/local/share/man/man3/DBI::PurePerl.3pm
Installing /opt/local/share/man/man3/TASKS.3pm
Installing /opt/local/bin/dbiprof
Installing /opt/local/bin/dbiproxy
Writing /opt/local/lib/perl5/site_perl/5.8.9/darwin-2level/auto/DBI/.packlist
Appending installation info to /opt/local/lib/perl5/5.8.9/darwin-2level/perllocal.pod

Мой вопрос: что я делаю неправильно и как я могу это сделать 1) Получить Apache, чтобы посмотреть в правильном каталоге, где находятся модули DBD & DBIили 2) Обновите способ установки модуля, чтобы установить их в один из каталогов поиска.Честно говоря, я не знаю, какой вариант имеет больше смысла, и мог бы также использовать руководство по этому вопросу.

Как вы, вероятно, можете сказать, я в данный момент довольно растерян.Пожалуйста помоги!!!Заранее спасибо.

Ответы [ 3 ]

4 голосов
/ 01 мая 2010

Похоже, что вы уже установили другой Perl через macports (/ opt / local - это место, куда идут все установки macports), а / opt / local / bin в вашем $PATH раньше, чем Системный Perl в / usr / bin. Это нормально, если вы довольны работой с Perl 5.8.9, а не с Perl 5.10.0 (подсказка: если вы не уверены в различиях, то различия не имеют значения).

Обычно рекомендуется не делать дополнительных установок в системе Perl. Apple может обновлять компоненты с помощью регулярных обновлений системы, которые могут помешать внесенным вами изменениям, и если вы допустили ошибку при установке, ее сложно исправить, не выполнив полную переустановку системы или не имея серьезного понимания особенностей операционной системы. , Итак, поскольку у вас уже есть готовая установка Perl, я настоятельно рекомендую вам придерживаться этой установки.

Однако вам, вероятно, не следует устанавливать библиотеки вручную, если в macports уже есть дистрибутив. Я использовал port search dbi и port search dbd, чтобы найти их: дистрибутивы называются p5-dbi и p5-dbd-mysql. Вы можете установить их, как и любой другой модуль macports: sudo port install <distroname>. (Вам может понадобиться установить и сам mod_perl.)

После этого вам просто нужно указать Apache / mod_perl использовать эту установку Perl, а не системный perl. Я никогда не делал этого, поэтому я не могу посоветовать лучший способ сделать это. Тем не менее, быстрый поиск по http://superuser.com позволяет предположить, что версия apache для macports будет работать по умолчанию (через тот же порядок $ PATH), поэтому я просто попробую и посмотрите :).

2 голосов
/ 09 мая 2010

Отличный ответ, Эфир. Сделав это слишком много раз, чтобы сосчитать, я могу дать вам несколько советов:

Примечание. Я явно ограничен одной ссылкой в ​​сообщении, поэтому мне пришлось удалить все свои аннотации. К счастью, есть Delicious, где я сохранил их все с тегом stackoverflowmacports . В любом месте ниже, где я удалил ссылку, чтобы она соответствовала нелепым мерам защиты от спама в Stack Overflow, я пометил ее (*) .

.
  1. Если для вас важно всегда иметь надежно работающую среду разработки, положитесь на программное обеспечение LITTLE Mac OS X, насколько это возможно. Я люблю Apple, но они абсолютно не стесняются нарушать пользовательские настройки своего программного обеспечения как можно чаще.

  2. Если # 1 звучит так, как вам нужно, Macports - ОТЛИЧНЫЙ выбор . Раньше я использовал Fink, но они остались в пыли много лет назад с точки зрения простоты использования и спектра доступного программного обеспечения. Самый простой способ установки macports - это метод установки бинарного пакета (*)

  3. Как упоминает Ether, когда все настроено правильно, MySQL, PHP и Apache, предоставляемые Macports, хорошо работают вместе, не мешая системным аналогам. Большая часть этого связана с настройкой PATH, но все эти детали обрабатываются сценарием установки пакета после полета (*)

  4. Когда вы в поезде Macports, оно должно стать первым местом, где вы будете искать любое программное обеспечение. port search и port info - постоянные спутники. В настоящее время у них 6863 порта (*) , которые покрывают большинство ваших баз.

  5. Если вам нужно выйти из области Macports, чтобы найти что-то, установите его в /usr/local. Эта часть иерархии файловой системы принадлежит вам. Не впадайте в ложное чувство безопасности и думайте, что, поскольку у Macports нет того, что вы устанавливаете, можно поместить его в /opt/local, потому что неизменно это программное обеспечение будет устанавливать некоторую зависимость, которая ТАКЖЕ будет зависимостью для какое-то программное обеспечение Macports в дальнейшем, и Macports не разрешит установить порт, если какой-либо из его файлов перезапишет существующий файл , который не управляется Macports (если вы не принудительно настроите его, что всегда плохо)

  6. Если вы выполняете какую-либо работу с Perl и используете версию Macports, вы абсолютно точно окажетесь в ситуации, когда у Macports нет того модуля CPAN, который вы ищете. (И действительно, учитывая, что существует два с половиной миллиарда модулей CPAN, кто может их винить?). Это будет происходить достаточно часто, так что вы, скорее всего, будете уставать от ручного способа установки (*) (perl Makefile.PL; make; make test; sudo make install; cha; cha; cha) и дольше для простоты использования, к которой вы привыкли в Macports.

    Если это так, вы можете использовать утилиту cpan (*) , CPANPLUS (*) или cpanminus (*) для всех ваших потребностей в установке , Просто убедитесь, что внесли необходимые изменения в конфигурацию выбранного вами инструмента, чтобы дать ему команду установить ваши модули в / usr / local / lib / perl5, игнорируя настойчивое требование /opt/local/bin/perl о том, что модули входят в /opt/local/lib/perl5. Вы можете установить переменную окружения PERL5LIB в скриптах инициализации вашей оболочки, чтобы дополнительно искать в /usr/local/lib/perl5 модули. Просто возьмите вывод @INC из perl -V и прикрепите его к концу ...

  7. И наконец ... Использование системных ежедневных сценариев инициализации или сторонних программ, таких как Anacron (*) или MacPorts Notifier (*) (оба доступны с по MacPorts), не забудьте регулярно обновлять программное обеспечение . Мать Apple не защищает вас с помощью обновлений программного обеспечения для установленного программного обеспечения Macports, которое содержит столько же ошибок и уязвимостей, сколько и то же программное обеспечение, которое входит в комплект поставки Apple.

    При частом обновлении вы будете опережать злодеев, а автоматизируя его, обновления на самом деле произойдут , и вы не закончите, как в прошлом, с полным выходным, потому что у вас была гора устаревших портов для обновления. Примечание. Macports готовит обновления, и если в какой-то момент происходит сбой, текущая версия продолжает работать. Яблоко может узнать у них кое-что, скажу тебе ...

Итак, это все, что я могу вспомнить на данный момент. Надеемся, что приведенные выше уроки помогут вам быстро и сэкономить все время, усилия и стресс, которые я испытал в прошлые годы при его изучении. Я бы сказал, что это все же намного лучше, чем альтернатива: ненавижу Apple, потому что они ломают все твои приятные вещи ...: -)

0 голосов
/ 15 ноября 2010

У меня была похожая проблема с Apache, использующим неправильный Perl. Я исправил это, добавив следующие строки в мой httpd.conf файл:

SetEnv PATH [colon-separated list of directories]

SetEnv PERL5LIB [colon-sep'd list of directories]

В моем случае это выглядело так:

SetEnv PATH /opt/local/bin:/opt/local/sbin:/usr/local/bin:/usr/local/mysql/bin:$PATH
SetEnv PERL5LIB  /opt/local/lib:/usr/local/lib
...