SVN::Web on FastCGI
半年くらい前からMovable TypeのPluginなどのsubversionリポジトリーを公開していたのだが、どうにも具合が良くなく、試行錯誤が続いていた。
最初PerlベースのSVN::WebをCGI経由で動かしていたのだが、猛烈にパフォーマンスが悪く、私の借りているサーバーだと数秒待たされたりしていた。代わりにmod_perl環境にdeployしたりもしてみたのだが、Apache 1.3との組み合わせだとReponse Headerが無茶苦茶になってしまう。デバッグしてもよいのだが、mod_perlにそんな思い入れもなく面倒でもあったのでCGIに戻した。ああでもやっぱり我慢できん!! ということで、PHPベースのWebSVNに移行し、イマイチ感に苛まれながらもここしばらく使ってきた。
さて最近になってFastCGIが私の中でプチブームになってきている。今朝、「そう言えばSVN::WebもFastCGIで動かせるかも」とようやく思い至った。調べてみると、これがバッチリ、元から対応していた。気が付くのが遅すぎだった罠。
- MT関係のリポジトリーのURL
- http://svn.as-is.net/svnweb/mt
- MT関係のリポジトリーの更新情報のRSS URL (FeedBurner)
- http://feeds.feedburner.com/ogawa-svn-mt
個人的な覚え書き
設定もろもろ
- まず、svnweb-installを実行し、index.cgiをsvnwebにリネームしておく。
- config.yamlを編集する。
- httpd.confに以下のように追加。
<VirtualHost *:80> ServerName svn.example.com ServerAdmin root@example.com DocumentRoot /svn_docroot <Directory "/svn_docroot"> Options ExecCGI AllowOverride None Order allow,deny Allow from all </Directory> <Files "config.yaml"> deny from all </Files> <Location /svnweb> SetHandler fastcgi-script </Location> </VirtualHost> - apachectl restartしておく。
特定の拡張子(例:fcgi)の付いたURL(http://svn.example.com/index.fcgi/mtなど)で構わなければ、上記のLocationの設定は不要。
真っ当にSVN::WebをFastCGIで動かすためのパッチ
この話はSVN::Web 0.38用。最近のバージョンではSVN::Web 0.43 - Ogawa::Memoranda程度の対策をしておけば大丈夫のようだ。
subversionもバージョンが上がってきてSVN::Coreの仕様が微妙に変わってきたのか、SVN::Webも多少の修正は必要。また、FastCGIで使うことを考えると簡単にdieられないようにする必要がある。
--- SVN/Web/Revision.pm.bak Fri Aug 27 02:26:17 2004
+++ SVN/Web/Revision.pm Tue Sep 27 20:23:43 2005
@@ -35,7 +35,7 @@
my $pool = SVN::Pool->new_default_sub;
my $rev = $self->{cgi}->param('rev') || die 'no revision';
- $self->{repos}->get_logs ([], $rev, $rev, 1, 0,
+ $self->{repos}->get_logs ([ $self->{path} ], $rev, $rev, 1, 0,
sub { $self->{REV} = $self->_log(@_)});
return {template => 'revision',
data => { rev => $rev, %{$self->{REV}}}};
--- SVN/Web.pm.bak Wed Nov 3 17:15:52 2004
+++ SVN/Web.pm Wed Sep 28 01:30:40 2005
@@ -251,6 +251,7 @@
$action ||= 'browse';
$path ||= '';
+ eval {
run ({ repos => $repos,
action => $action,
path => '/'.$path,
@@ -258,6 +259,11 @@
output_sub => \&cgi_output,
style => $config->{style},
cgi => $cgi});
+ };
+ if ($@) {
+ print "Content-Type: text/html\n\n";
+ print "Got an error: $@";
+ }
last if $cgi_class eq 'CGI';
}
}
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/319
Comments (0)