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”が引き継がれなかったかはわからず。
コメント