Apache+Perl+PostgreSQL

DBをつかったサーバーアプリを開発するときは、Apache+Perl+PostgreSQLでサーバーを構築しています。

最近CentOS5デビューしたので勝手がわからない面があるのですが、CGI(Perl)からPostgreSQLにアクセスできずにハマってしまいました。

【症状】
・psqlではPostgreSQLにアクセスできる
・コマンドラインのPerlスクリプトからはPostgreSQLにアクセスできる
・”su”(”su -“でない)でスイッチユーザーすると、PostgreSQLにアクセスできない
・WebからCGIを通してPostgreSQLにアクセスできない
・/var/log/httpd/error_logに以下のエラーがでる(適当に改行を加えました)

install_driver(Pg) failed: Can't load
'/usr/lib/perl5/site_perl/5.8.8/i386-linux-thread-multi/auto/DBD/Pg/Pg.so'
for module DBD::Pg: libpq.so.5: cannot open shared object file:
No such file or directory at /usr/lib/perl5/5.8.8/i386-linux-thread-multi/DynaLoader.pm line 230.

【調査】
“su”と”su -“で結果に違いがあるため、環境変数(setとexport)を調査したところ、”su”の場合は”LD_LIBRARY_PATH”が引き継がれていないことが判明。

【対策】
“/etc/httpd/conf/httpd.conf”に”mod_env”があることを確認し、以下を追加。

### PostgreSQL 8.2.5 ###
SetEnv LD_LIBRARY_PATH /usr/local/pgsql/lib

【感想】
結局、なぜ”su”で”LD_LIBRARY_PATH”が引き継がれなかったかはわからず。

コメント

タイトルとURLをコピーしました