2010-01-05 20:42 | tag: apache, linux
RHEL/CentOS 5では、AapacheはCロケールで起動します。 /etc/sysconfig/i18n 内のLANG変数の値は使用されません。変更するには、/etc/sysconfig/httpdファイルでHTTPD_LANG変数を設定します。
Cロケールで起動するデフォルトの状態では、Apache上で実行するアプリケーションにおいて日本語の処理に問題が発生する場合があります。
ja_JP.utf8に設定するには、 /etc/sysconfig/httpd に以下の行を追加します。
HTTPD_LANG=ja_JP.utf8
/usr/local/apache2/bin/envvars に以下の行を追加します。このファイルは apachectl
実行時に読み込まれます。
LANG=ja_JP.utf8 export LANG
Apacheの起動スクリプト /etc/rc.d/init.d/httpd は、 /etc/sysconfig/httpd が存在すれば読み込みます。
if [ -f /etc/sysconfig/httpd ]; then . /etc/sysconfig/httpd fi
/etc/rc.d/init.d/httpd start
を実行すると、LANG変数にHTTPD_LANGの値をセットした上でApacheを起動します。
start() { echo -n $"Starting $prog: " check13 || exit 1 LANG=$HTTPD_LANG daemon --pidfile=${pidfile} $httpd $OPTIONS RETVAL=$? echo [ $RETVAL = 0 ] && touch ${lockfile} return $RETVAL }
Apache+Passengerの構成で実行している Redmine でSubversionリポジトリに格納されているファイルの差分を見ようとしたとき、日本語ファイル名が使われていると「リポジトリに、エントリ/リビジョンが存在しません」というエラーが表示されます。
これは、Redmineが内部でsvnコマンドを実行したときにエンコーディング変換関係のエラーが発生していることが原因です。エラーはApacheのログで確認できます。
svn: Can't convert string from 'UTF-8' to native encoding: svn: Index: ?\227?\129?\181?\227?\129?\134.rb
/etc/sysconfig/httpd 内で HTTPD_LANG=ja_JP.utf8
と設定すると、正しく差分表示が行えるようになります。