2009年12月5日土曜日

ruby-oci8からOracleへ接続 CGI文字化け

http://ruby-oci8.rubyforge.org/ja/InstallForInstantClient.html
を参考にセットアップ

環境
Ubuntu 8.04
Ruby1.8.6
Apache 2.2.8
Oracle Instantclient 11.2
ruby-oci8


環境変数設定
$ export LD_LIBRARY_PATH=/opt/oracle/instantclient_11_2
$ export NLS_LANG=Japanese_Japan.UTF8

でコンソールでは文字化けせずに日本語の入った列もselectできた。
ところが同じスクリプトをCGIから実行すると日本語が文字化けする。


[Fri Dec 04 08:44:47 2009] [error] [client 127.0.0.1] Premature end of script headers: hogehoge.cgi
env.c:257:in oci8lib.so: Error while trying to retrieve text for error ORA-12705 (OCIError)
from /usr/local/lib/site_ruby/1.8/oci8.rb:229:in `initialize'
from /usr/local/lib/site_ruby/1.8/hoge/hogehoge.rb:309:in `new'
from /usr/local/lib/site_ruby/1.8/hoge/hogehoge.rb:309:in `initialize'
from /var/www/hogehoge.cgi:4:in `new'
from /var/www/hogehoge.cgi:4


Apacheの起動スクリプトに環境変数を設定してもだめ、検索した結果Apacheの環境変数は
SetEvnディレクティブでセットすることが分かりapache2.confを編集後再起動し無事に日
本語が表示できた。


...
SetEnv LD_LIBRARY_PATH /opt/oracle/instantclient_11_2
SetEnv NLS_LANG Japanese_JAPAN.UTF8
...

/etc/apache2/apache2.conf