日記
trac関連のメモEdit

複数tracプロジェクトは同じディレクトリ(/path/to/tracprojects/tracs)に配置した方がいい*1。同一ディレクトリ下のプロジェクト群を、tracdはまとめて管理してくれる。

関連するsubversionレポジトリについても、レポジトリ同士*2は同じディレクトリ(/path/to/tracprojects/svns)に作っておけば、mod_dav_svnでSVNParentPathとAuthzSVNAccessFileを組み合わせて、そのディレクトリ内のレポジトリをまとめて管理できる*3

また、tracdもmod_dav_svn経由のsubversionも、同じhtpasswd互換のパスワードファイルを使って認証することができるので、tracとsubversionで共通のアカウント管理が可能。

tracプロジェクトの管理ユーザーの追加(*4)は、

trac-admin /path/to/tracproject permisson add [adminuser] TRAC_ADMIN

ただし、すべての管理をWeb経由でできるわけではないので、ある程度trac-adminあるいは/path/to/tracproject/conf/trac.iniをいじる必要がある(WebAdminPluginを要チェック)。

ネットワーク的にオープンな場所でクローズドなtracプロジェクトを運用するためには、tracを完全認証制(未ログイン者は閲覧アクセスもできない)にする設定方法があるのかどうか探す必要がある(anonymousからあらゆる権限をremoveすればいいのかな?)。

標準のCSS(文字が小さい)が気に入らない人は、/path/to/tracproject/templates/site_css.csをいじる。たとえば、

<?cs
##################################################################
# Site CSS - Place custom CSS, including overriding styles here.
?>
body {
font-size: 1em;
line-height: 1.5em;
}

とか*5

SVNParentPathを使ってマウントしたsubversionレポジトリ(http://example.com/[someproject])に対して、svn co http://example.com/[someproject]ができないな*6。svn co file:///path/to/[someproject]はできるんだけど。これは仕様なのかな? それとも俺の設定がどこかおかしいのかな?

デザイナーとかと共同作業をする際に、subversion(というかバージョン管理システムという概念)を説明しないままに、そこそこの恩恵を受けてもらおうというアプローチ案。smbで適当なディレクトリをマウント(/path/to/someproject/smb)し、そこにある時点のexportをコピーする。デザイナーにはそこをマウントして作業してもらう。そして、別にcoしたディレクトリ(/path/to/someproject/work)を用意し、そこに作業ディレクトリの内容を定期的にsync*7&commit*8すると、作業履歴がsubversionに残る*9。こうすることで、.svnディレクトリの存在とかに気を遣わずに、自由に編集ができる。ただこの方法と、ふつうのsubversionの使い方とは相容れないんで、作業ディレクトリの切り方とかを考えておく必要がある*10

とか書きながらsubversion関連のドキュメントをながめていたら、subversion 1.2以降ではWebDAVの自動バージョン化なんて機能が使えるようになっていたらしい。デザイナーとの共同作業とかで使うならこっちの方がいいかな? でもWebDAVディレクトリってsmbと比べると微妙に不便なんだよなー。

全部の権限を削除したらエラーが出た

trac-admin remove /path/to/project permission remove anonymous BROWSER_VIEW LOG_VIEW FILE_VIEW CHANGESET_VIEW TICKET_VIEW TICKET_CREATE TICKET_APPEND TICKET_CHGPROP TICKET_MODIFY TICKET_ADMIN MILESTONE_VIEW MILESTONE_CREATE MILESTONE_MODIFY MILESTONE_DELETE MILESTONE_ADMIN ROADMAP_VIEW ROADMAP_ADMIN REPORT_VIEW REPORT_SQL_VIEW REPORT_CREATE REPORT_MODIFY REPORT_DELETE REPORT_ADMIN WIKI_VIEW WIKI_CREATE WIKI_MODIFY WIKI_DELETE WIKI_ADMIN TIMELINE_VIEW SEARCH_VIEW CONFIG_VIEW

ってやったら*11、tracdの該当のプロジェクトにアクセスすると

Oops...
Trac detected an internal error:
iteration over non-sequence
Traceback (most recent call last):
File "/usr/lib/python2.3/site-packages/trac/web/standalone.py", line 303, in _do_trac_req
dispatch_request(path_info, req, env)
File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 139, in dispatch_request
dispatcher.dispatch(req)
File "/usr/lib/python2.3/site-packages/trac/web/main.py", line 80, in dispatch
req.perm = PermissionCache(self.env, req.authname)
File "/usr/lib/python2.3/site-packages/trac/perm.py", line 276, in __init__
self.perms = PermissionSystem(env).get_user_permissions(username)
File "/usr/lib/python2.3/site-packages/trac/perm.py", line 132, in get_user_permissions
for perm in self.store.get_user_permissions(username):
File "/usr/lib/python2.3/site-packages/trac/perm.py", line 218, in get_user_permissions
for user, action in rows:
TypeError: iteration over non-sequence

というエラーが出るようになった。権限が一個もなくなると、きっと権限チェックをiterationで回しているあたりでエラーが出るんだろうな(ソース未確認)。権限が空でも動くように直せばいいのかな?

ちなみに権限を適当に一個addしておけばエラーは出ず、ほとんどの機能はつぶれてくれる(WIKI_VIEWもつぶれるんで、主要な情報は何も表示されなくなる)んだけど、ヘッダ・フッタ回り+ユーザー設定メニューが見えちゃうんで、ちょっと気持ち悪いんだよな。本当はヘッダ・フッタ回りも完全に消えて、/loginを直接叩かないと何も見えない方がいいんだけど。

tracdとCGI起動の重さの違い

日常的に負荷状況が高いサーバーで、tracd(+Apache2リバースプロキシ)と(Apache2)CGI起動のtracを同時に動かしてみたところ、tracd経由の方が圧倒的に軽かった。っつーかCGI起動は重すぎだな。mod_pythonって手もあるけど、手軽さからいうとtracdを基本にした方がいいかな。トップページの表現力に難があるが。

*1 シンボリックリンクを使ったりする手もあるけど

*2 「tracプロジェクトと同じ」ではないよ

*3 snvserveは使ったことがないので、そっちを使うとどういうことができるのか未検討

*4 最初TRAC_ADMINに気づかずにWIKI_ADMIN、TICKET_ADMINとかいちいち追加してたよ

*5 ひな形テンプレートを書き換えようと思ったんだけど、/usr/share/trac/templatesにはsite_css.csがないなー。どこにあるんだろう

*6 /に対してPROPFINDすると301 Moved Permanentlyが返って終了になるみたい。subversion 1.3.0

*7 rsync -r --delete --exclude="*.svn" /path/to/someproject/smb /path/to/someproject/work

*8 svn commit /path/to/someproject/work -m "auto commit" -q

*9 これだけだと削除したファイルがレポジトリから消えないんで、その辺は別途svn deleteする処理をかます必要がある

*10 デザイン系ディレクトリは上記方法にして、プログラム系ディレクトリはふつうにcommitするとか。あるいは自動コミットの処理をもうちょっと頭よくして対応できるかな?

*11 ちなみに上記はTracPermissionsからコピっただけで、不要なエイリアスとかも混ざってる

Published At2006-02-13 00:00Updated At2006-02-13 00:00