2010-05-01 7 views
2

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

Вот что сообщается в журналах ошибок 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, используя следующие команды, как указано в этом forum post:

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 упоминает в e rror в начале этого сообщения. Вот то, что я вижу во время установки:

$ 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) Обновите способ установки модуля, чтобы установить их в один из каталогов поиска. Я, честно говоря, не знаю, какой вариант имеет больше смысла и может использовать руководство по этому поводу.

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

+2

Perl-что Апач помощью является система Perl, которая установлена ​​в системных каталогов и является perl 5.10.0. Perl, который вы используете для сборки и установки модулей, - это локально установленный perl 5.8.9. – hobbs

+0

@hobbs - Мне было интересно об этом, но я не мог понять, почему разница в версиях. Как мне с этим справиться? Могу ли я установить его так, чтобы команда perl представляла собой системную версию perl 5.10.0? Если нет, как бы вы порекомендовали использовать правильный perl-вызов для компиляции модулей? –

+0

C. Вы можете и, вероятно, должны это сделать, но мои навыки sysadmin для Mac не соответствуют нюхательным свойствам. В качестве обходного пути попробуйте выполнить '/ usr/bin/perl Makefile.PL' при создании материала, а затем он должен быть построен против этого конкретного perl и установить его в свои директории. – hobbs

ответ

4

Похоже, что вы уже установили другой Perl с помощью macports (/ Opt/местное, где все MacPorts установки идут), и/Opt/местные/бен раньше в вашем $PATH, чем система Perl в/USR/бен , Это нормально, если вы довольны работой 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 предполагает, что версия macache для apache будет выполняться по умолчанию (через то же упорядочение $ PATH), поэтому я просто попробую и посмотрю :).

2

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

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

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

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

  3. Как Эфир упоминает, когда у вас есть все настроено правильно, то MacPorts предоставляемый MySQL, PHP и Apache работать вместе хорошо без помеченные системным аналогом. Большая часть этого имеет отношение к настройке вашей 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/lib/perl5. Вы можете установить переменную среды PERL5LIB в скриптах инициализации вашей оболочки, чтобы дополнительно просмотреть модули /usr/local/lib/perl5. Просто возьмите @INC вывод от perl -V и закрепите его на конце ...

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

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

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

0

У меня была аналогичная проблема с 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