北海道苫小牧市出身の初老PGが書くブログ

永遠のプログラマを夢見る、苫小牧市出身のおじさんのちらしの裏

Trac-0.11.1.ja1でエラー発生時にエラー(?)

Trac-0.11.1.ja1入れました。以下の現象が起きました。

現象

mime_encoding の指定が間違えていると、以下のエラーが発生します。本来ならログに吐かれるだけで済むはずです。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-18: ordinal not in range(128)

Python Traceback

Most recent call last:
File "/.../Trac-0.11.1.ja1-py2.3.egg/trac/web/main.py", line 424, in _dispatch_request
File "/.../Trac-0.11.1.ja1-py2.3.egg/trac/web/main.py", line 198, in dispatch
File "/.../Trac-0.11.1.ja1-py2.3.egg/trac/ticket/web_ui.py", line 171, in process_request
File "/.../Trac-0.11.1.ja1-py2.3.egg/trac/ticket/web_ui.py", line 389, in _process_newticket_request
File "/.../Trac-0.11.1.ja1-py2.3.egg/trac/ticket/web_ui.py", line 974, in _do_create

対応

以下のようにパッチあてました。

# diff -u web_ui.py.orig web_ui.py
--- web_ui.py.orig      2008-08-27 13:01:58.000000000 +0900
+++ web_ui.py   2008-08-27 13:18:08.000000000 +0900
@@ -1002,7 +1002,7 @@
                 tn.notify(ticket, newticket=False, modtime=now)
             except Exception, e:
                 self.log.exception("Failure sending notification on change to "
-                                   "ticket #%s: %s" % (ticket.id, e))
+                                   "ticket #%s: %s" % (ticket.id, unicode(e).encode("utf8")))
 
         # After saving the changes, apply the side-effects.
         for controller in controllers:

解説

エラーメッセージが日本語になったようです。が、ログをとる部分のコードがunicodeを意識してないので落ちていました。*1

メールのエンコーディング設定が無効です: iso-2022-jp

翻訳は util/translation.py でしてます。

'Invalid email encoding setting: %(str)s': 'メールのエンコーディング設定が無効です: %(str)s',

*1:今回はエラーあったとこしかなおしてないので、他のExceptionをログに吐く部分もヤバい気がします。