ついでにloggerheadも動かしてみる

http://d.hatena.ne.jp/ytqwerty/20090905#p1 の続きでloggerheadも動かしてみます。

bzr-smart.cgiが動いたところから続けての手順です。
py26-distribute, py26-paste, py26-simpletalとloggerheadをhome以下にインストールします。ファイルをアップロードしてCGI経由でsetup.py --home=~/bzrを実行するだけ。loggerheadについては1.17が公開されたあとのbzr本体のAPIの変更で互換性がなくなってますので、rich-trunkから持ってきます。
で、loggerheadのWSGIアプリ部分をCGIとして動かすための嘘mainをでっちあげます。

#!/usr/bin/env python

import sys
sys.path.insert(0, "/home/自分のアカウント/bzr/lib/python")
sys.path.insert(0, "/home/自分のアカウント/bzr/lib/python/distribute-0.6.14-py2.6.egg")

from loggerhead import main
import fcgi # http://svn.saddi.com/py-lib/trunk/fcgi.py

# 通常serve-branchesコマンドに渡すコマンドライン引数を配列として作る
args = ["--user-dirs", ".", "--trunk-dir", "."] #このCGIと同じディレクトリの直下のブランチが公開対象

main.load_plugins()
config, path = main.get_config_and_path(args)
app = main.make_app_for_config_and_path(config, path)
fcgi.WSGIServer(app).run()

これで動くことは動くのですが、これだけですと案内として"To get this branch, use: bzr branch ..."のように表示されるパスが環境変数SCRIPT_NAME以下のみしか表示されません。(要するにhttp://ドメイン名の部分がつかない)
各ブランチのbranch.confにpublic_urlを設定してやればそれが表示される……はず……なのですが、なんかうまくいってない様子です。よくわかりません。/etc/loggerhead.confで設定できる?共用レンタルサーバーでどうしろと?
ですので、とりあえず~/bzr/lib/python/loggerhead/apps/branch.pyに直接ハードコードして対処。served_urlというのがそうですので、こんなかんじで。

-  self.served_url = self.url([])
+ self.served_url = "http://uso800.neta" + self.url([])

これで、めでたしめでたし、のはず……。

動かしておいてなんですけど、loggerheadって耐えられないぐらい重いですよね!hgweb.cgiってかっこいいですよね!