wiki:ApacheModPythonTracMercurialUTF8

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)