2

Mac ラップトップで Perl 開発環境をセットアップしようとしていますが、動作させるのに非常に苦労しています。すべてが正しく構成されていると思っていましたが、サンプル スクリプトを実行しようとすると、DBI モジュールに関するエラーが報告され、DB にアクセスできません。

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) DBD および DBI モジュールがインストールされている正しいディレクトリを Apache に検索させるか、2) モジュールをインストールする方法を更新して、それらをいずれかにインストールする方法です。検索ディレクトリ。正直なところ、どのオプションがより理にかなっており、それに関するガイダンスも使用できるかはわかりません。

あなたがおそらく言うことができるように、私は現時点でかなり迷っています。助けてください!!!前もって感謝します。

4

3 に答える 3

4

macports経由で別の Perl を既にインストールしているようです(/opt/local はすべての macports のインストール先です)、/opt/local/bin は$PATH/usr/bin のシステム Perl よりも古いものです。Perl 5.10.0 ではなく Perl 5.8.9 を実行することに満足している場合は、それで問題ありません (ヒント: 違いがよくわからない場合は、違いは問題ではありません)。

通常、システム Perl に余分なインストールを行わないことをお勧めします。Apple は、定期的なシステム アップデートを通じてコン​​ポーネントをアップグレードする場合があります。これは、ユーザーが行った変更に影響を与える可能性があります。また、インストールを間違えた場合、システムを完全に再インストールするか、オペレーティング システムの根性を真剣に理解しない限り、修正することは困難です。 . したがって、すでに別の Perl インストールの準備ができているので、それを使い続けることを強くお勧めします。

ただし、macports で利用可能なディストリビューションが既にある場合は、ライブラリを手動でインストールするべきではありません。私はport search dbiとを使用しport search dbdてそれらを見つけました。ディストリビューションの名前は p5-dbi および p5-dbd-mysql です。他の macports モジュールと同じようにインストールできますsudo port install <distroname>。(mod_perl 自体もインストールする必要があるかもしれません。)

その後、システム perl ではなくその Perl インストールを使用するように Apache/mod_perl に指示する必要があります。私はそれをしたことがないので、最善の方法についてアドバイスすることはできません。ただし、http://superuser.comですばやく検索すると、Apache の macports バージョンがデフォルトで (同じ $PATH 順序で) 実行されることが示唆されているため、試してみるだけです :)。

于 2010-05-01T16:57:47.730 に答える
2

すばらしい答えです、エーテル。数え切れないほど何度もこれを行ってきたので、いくつかのアドバイスをすることができます。

注: どうやら投稿内のリンクは 1 つに制限されているようです。そのため、すべての注釈を削除する必要がありました。ありがたいことに、stackoverflowmacportsタグを使用してそれらすべてを保存した Delicious があります。スタック オーバーフローのばかげたスパム対策に合わせてリンクを削除した以下の場所には、(*)のマークを付けました。

  1. 常に確実に動作する開発環境が重要な場合は、可能な限り LITTLE Mac OS X バンドル ソフトウェアに頼ってください。私は Apple を愛していますが、彼らはソフトウェアのカスタム設定をできる限り頻繁に壊すことに何の不安もありません

  2. 1 番があなたがしなければならないことのように思えるなら、Macports は素晴らしい選択です。以前は Fink を使用していましたが、使いやすさと利用可能なソフトウェアの範囲の点で、何年も前に取り残されてしまいました。macports をインストールする最も簡単な方法は、バイナリ パッケージのインストール方法(*)です。

  3. Ether が言及しているように、すべてが正しく設定されている場合、Macports が提供する MySQL、PHP、および Apache はすべて、システムにインストールされたアナログが干渉することなくうまく連携します。そのほとんどは PATH 設定に関係していますが、これらの詳細はすべて、パッケージ インストーラーのポストフライト スクリプトによって処理されます(*)

  4. Macports トレインに乗ったら、ソフトウェアを探す最初の場所になるはずです。port searchそしてport infoいつもの仲間です。現在、 6863 個のポート(*)があり、ほとんどの基地をカバーしています。

  5. 何かを見つけるために Macports 領域の外に出る必要がある場合は、 にインストールして/usr/localください。ファイル システム階層のその部分は、自分で操作できます。Macports にはあなたがインストールしようとしているものがないからといって、Macports を入れても大丈夫だ、という誤った安心感に惑わされないでください/opt/local。 Macports ソフトウェアは、そのファイルのいずれかが Macports によって管理されていない既存のファイルを上書きする場合、Macports はポートのインストールを許可しません(強制しない限り、これは常に悪いマナーです)。

  6. Perl を使用して Macports のバージョンを使用している場合、探している CPAN モジュールが Macports にないという状況に陥ることは間違いありません。(そして、実際には、25 億の 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/perl5PERL5LIBシェルの init スクリプトで環境変数を設定して、さらに/usr/local/lib/perl5モジュールを探すことができます。@INCから出力を取得perl -Vし、最後に追加するだけです...

  7. そして最後に... システムの毎日の init スクリプト、または Anacron (*)や MacPorts Notifier (*) (どちらもMacPortsから入手可能) などのサードパーティ製ソフトウェアを活用して、ソフトウェアを頻繁に更新してください。Macports にインストールされたソフトウェアのソフトウェア アップデートで保護されているマザー アップルはありません。このソフトウェアには、Apple がバンドルしているソフトウェアと同じように多くのバグやセキュリティ上の脆弱性があります。

    頻繁に更新することで悪者の一歩先を行くことができ、それを自動化することでアップグレードが実際に行われ、過去のようにアップグレードする古いポートが山ほどあったために週末が丸々吹き飛ばされてしまうことはありません。 . 注: Macports は更新を段階的に行い、いずれかの時点で失敗した場合でも、現在のバージョンは引き続き機能します。Appleは彼らから1つか2つのことを学ぶことができると私は言います...

だから、それが私が考えることができるすべての瞬間です。願わくば、上記のレッスンで皆さんがすぐに学習に取り掛かり、私が過去数年間学習で経験したすべての時間、労力、ストレスを節約してください。私はそれが代替案よりもはるかに優れていると主張します.Appleを憎むのは、あなたの素晴らしいものをすべて壊すからです.

于 2010-05-09T03:25:13.187 に答える
0

間違った Perl を使用している Apache でも同様の問題がありました。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
于 2010-11-15T16:42:25.080 に答える