Apache + mod_python + Trac + Mercurialの環境の日本語文字化け対策
環境
Apache/mod_pythonの上で動かしているTracに、Mercurialプラグインを入れた。
現象
タイムラインやチェンジセットなど、コミットログの日本語が「????????」で表示される。
原因
mod_pythonは、Apacheを起動したときの環境からの環境変数、Apacheの設定ファイルの「SetEnv」コマンドで設定された環境変数を、mod_python配下のアプリケーションに引き継がない。これは仕様。mod_pythonは、わざわざそうしている。 そのため、Mercurialプラグインから呼び出されたMercurialモジュールが、どの言語で動けばいいのかわからない。
方針
「HGENCODING」環境変数に、「utf-8」を指定する。
対策
適当な場所にディレクトリを作る。
# mkdir /home/oursites/mysite/python
このディレクトリ内にファイルを作る。
- /home/oursites/mysite/python/initenv.py
-
import os import mod_python.apache def handler(req): os.environ['HGENCODING'] = 'utf-8' return mod_python.apache.OK
Apacheの設定ファイルをいじる。
- 旧(抜粋)
-
PythonHandler trac.web.modpython_frontend
- 新(抜粋)
-
PythonHandler initenv trac.web.modpython_frontend PythonPath "['/home/oursites/mysite/python']+sys.path"
Mercurialプラグイン自体を改変する必要は無い。
(2008/7/14 - sgk)
