Tracの複数プロジェクトまとめ(TraM)

CentOS5.4+Trac0.11.2.1.ja1 を使って、1サーバで複数のTracを運用しています。
svnのリポジトリは /var/svn/hoge1, /var/svn/hoge2 みたいな感じで
それぞれのsvnに対して /var/trac/hoge1, /var/trac/hoge2 とTracを設定しています。

んで、複数プロジェクトの進行をチェックするのがちょっと面倒なので、Tracの複数プロジェクトをまとめるのをやってみました。
ちょっと調べてみると、こちらのリポジトリからTraM0.3をチェックアウトできるみたい。

svn checkout http://svn.sourceforge.jp/svnroot/shibuya-trac/plugins/TraM/branches/genshi-ja
cd genshi-ja
python setup.py install

で、インストール。ここまでは問題なし(本当は別のサイト見て0.2をインストールしちゃったので、一回やり直した)
あとチェックアウトしたリポジトリに入ってた t7823-genshi_modpython-r8333-011.diff を tracのソースにパッチ当て。trac/web/__init__.py のパッチみたいなので、pythonのsite-packagesのtracのディレクトリに移動して

patch < t7823-genshi_modpython-r8333-011.diff

設定ですが、同じくRyuzeeさんの所を参考にして作業。

まとめ用のsvn(/var/svn/all)とまとめ用のtracを作成(/var/trac/all)

svnadmin create /var/svn/all
chown -R apache /var/svn/all
trac-admin /var/trac/all initenv (リポジトリは/var/svn/all を指定、他は適当)
chown -R apache /var/trac/all

まとめたいTracプロジェクトの /var/trac/hoge1/conf/trac.ini とかに

tramplugin.* = enabled

の記述を追加。

最後に httpd.conf の設定ですが、ココでハマりました。

Alias /trac/hoge1 "/var/www/cgi-bin/trac.cgi"
<Location /trac/hoge1>
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv /var/trac/hoge1
</Location>
Alias /trac/hoge2 "/var/www/cgi-bin/trac.cgi"
<Location /trac/hoge2>
    SetHandler mod_python
    PythonHandler trac.web.modpython_frontend
    PythonOption TracEnv /var/trac/hoge2
</Location>

こんな感じの設定にしておいて、複数Tracのディレクトリを分けて管理してたので。ここにTramの設定を追加。

#All Project (TraM)
Alias /trac/all "/var/www/cgi-bin/trac.cgi"
<Location /trac/all>
    SetHandler mod_python
    PythonHandler tram.web.modpython_frontend
    PythonOption TracEnvParentDir /var/trac
    PythonOption TracUriRoot /trac
</Location>

としたら「Internal Server Error」
ログ見ると 「PythonHandler tram.web.modpython_frontend: ImportError: No module named web」
と。

んで、ココでしばらく悩んだ(setuptools辺りとかclearsilver入れ直したり、思い誤ってweb.pyインストールしたり)のですが。
tramの中見たら、tram直下にmodpython_frontend.pyが有ったので

Alias /trac/all "/var/www/cgi-bin/trac.cgi"
<Location /trac/all>
    SetHandler mod_python
    PythonHandler tram.modpython_frontend
    PythonOption TracEnvParentDir /var/trac
    PythonOption TracUriRoot /trac
</Location>

と変更したらそのまま動いた…
その他使い勝手とかまだ見てないけど、それは後日にしようかと。TracLightningくらい予めプラグイン乗っかってるパッケージ、Linuxに無いのかなぁ。

(追記)
何か統合タイムラインがエンコード関係の問題で動いてなかったので。site-packages/sitecustomize.py に

import sys
sys.setdefaultencoding('utf-8') # cp932 でも良いかな。

を書いて動かした。いやでもこの対応で良いのかな?

TracWikiのPDF化プラグイン、日本語の改行対応

先日のTracWikiをPDF化する件ですが、どうも日本語で長文を書いたときに自動的に改行されずに、ページをはみ出してました。
英語の長文を適当に突っ込んでPDF変換するとちゃんと単語間(スペースの部分)で改行されるので、どうもコレはwordWrap辺りの問題ではないかと。
「linebreak」でpisaの下のソースを当たってみると reportlab_paragraph.py というファイルの925-929行目に

if style.wordWrap == 'CJK':
    #use Asian text wrap algorithm to break characters
    blPara = self.breakLinesCJK([first_line_width, later_widths])
else:
    blPara = self.breakLines([first_line_width, later_widths])

とゆー記述が。
reportLabのドキュメントによると、たぶんParagraphStyleってclassのwordWrapを「CJK」に書き換えれば良いと思うのですが、pisa経由でソース追っかけて行ったら良くわかんなくなってきて・・・結局。

if style.wordWrap == 'CJK':
   #use Asian text wrap algorithm to break characters
   blPara = self.breakLinesCJK([first_line_width, later_widths])
else:
   blPara = self.breakLinesCJK([first_line_width, later_widths])

と言うベタな対応(まぁ基本的に日本語でしか書かないし)。
禁則処理とか右端の揃い方にちょっと不満はあるのですが、その辺はもうちょい時間のある時にでも。

TracWikiのPDF化プラグイン

今まで趣味の事と下らない事しか書いてなかったので、これからはちょっとプログラム系のネタも一緒に載せてみようかなと。

で、仕事でプロジェクト管理とかにTracとゆーソフトを使ってるのですが。これにプロジェクト管理用のWikiがくっついてまして。仕様とか議事録とかメモとかを書いとくのに重宝してまして。
で、コレをそのまんまPDFにできないかなーと思ってググった所。
http://d.hatena.ne.jp/penguin_niisan/20100209/1265674139
でバッチリ紹介されてました。
http://trac-hacks.org/wiki/TracWikiPrintPlugin から TraicWikiPrintPluginとゆーモノを使えば良いようで。

ウチの環境はCentOS5.4+Python2.4.3+Trac0.11で。大体こちらのサイトに書いてある通りで問題なかったのですが、
http://www.daionet.gr.jp/~knok/trac/trac.cgi/wiki/pisa-l10n
から持ってきたPatchがeasy_install でインストールしたPISAとのバージョン違い(pisa-3.0.32)で通らなかったので、パッチの内容を見ながら直接
/usr/lib/python2.4/site-packages/pisa-3.0.32-py2.4.egg/sx/pisa3/pisa_context.py
を修正しました。

で、先のサイトでも書かれてる通りHeiseiKakuGo-W5だと、英数字がズレる。(普通にReportLabでHeiseiKakuGo-W5使うときはこんなにズレないんだけどなぁ・・・)
なので http://mix-mplus-ipa.sourceforge.jp/ からIPAフォント系を取ってきて、/usr/share/fonts/ja/TrueType/ の下にごそっとコピー。loadTTFontを組み込んでOKかなーと思ってたんですが、ここでちょっとハマリ。どうもReportLabにフォントパスが通ってないみたいで・・・結局
self.loadTTFont(['ipag','ipag'],’/usr/share/fonts/ja/TrueType/ipag.ttf’)
self.loadTTFont(['ipamp','ipamp'],’/usr/share/fonts/ja/TrueType/ipamp.ttf’)
self.fontList['helvetica'] = ‘ipamp’

と、フルパスでフォントの設定したら上手く行きました。

ちなみに設定は trac.ini に
[components]
wikiprint.* = enabled

[wikiprint]
toc_title = “{ ブックで出力する時のタイトル }”
#CSS and content files (or URLS, using http://…)
#css_url=c:/path/to/file.css
#article_css_url=c:/path/to/article.css
#book_css_url=c:/path/to/book.css
#frontpage_url=c:/path/to/frontpage.html
#extracontent_url=c:/path/to/extracontent.html

みたいな感じでokでした。
まだやってないけど、PDF出力のフォーマットやヘッダフッタ設定は上記のcssとかhtmlで出来るみたい。書式は
http://www.xhtml2pdf.com/doc/pisa-en.pdf
を参照で。