Sep 26, 2005

SVN::Web on FastCGI

半年くらい前からMovable TypeのPluginなどのsubversionリポジトリーを公開していたのだが、どうにも具合が良くなく、試行錯誤が続いていた。

Ogawa::Buzz: SVN::Web導入

最初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

個人的な覚え書き

設定もろもろ

  1. まず、svnweb-installを実行し、index.cgiをsvnwebにリネームしておく。
  2. config.yamlを編集する。
  3. 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>
    
  4. apachectl restartしておく。

特定の拡張子(例:fcgi)の付いたURL(http://svn.example.com/index.fcgi/mtなど)で構わなければ、上記のLocationの設定は不要。

真っ当にSVN::WebをFastCGIで動かすためのパッチ

この話はSVN::Web 0.38用。最近のバージョンではOgawa::Buzz: SVN::Web 0.43程度の対策をしておけば大丈夫のようだ。

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';
     }
 }

About Me

My Photo

つくばで働く研究者

Total Pageviews

Amazon

Copyright 2012 Ogawa::Buzz | Powered by Blogger
Design by Web2feel | Blogger Template by NewBloggerThemes.com