IISでHikiを動かして、Subversionで履歴の管理が出来るようにする。
Windows XP SP2 IIS 5.1 Hiki 0.6.5 ActiveScriptRuby 1.8.1.2 Subversion 1.0.6
HikiFarmやSubversionを使わない、一般的なインストールならば、Windowsでも特に問題にはならない(Windows 2000のIIS 5.0にはバグがあるので、cgiの先頭でカレントパスを変更するコードを入れる必要があるかもしれない。IIS 5.1ならば問題なし)。しかしSubversionを使うためには、HikiFarmを使わなければならないようなので、HikiFarmの設定をした。うまく設定すれば、HikiFarmの必要は無いかもしれない。この辺の設定は後日挑戦してみようと思う。今回は、HikiFarmを構築した上で、Subversionで管理をさせる。
関係ないけど、HikiFarmで作成したHikiごとにリポジトリを作成するようにした方が良いかもしれない。関係ないHikiのページが更新されてもリビジョンが増えてしまうからだ。この辺はHikiFarmのindex.cgiを修正すればそんなに難しくなさそう。
repos_rootの値をチェックして、リモートのリポジトリははじくようなコードが入っているのだが、そのチェック方法に問題がある。
Windowsで、repos_rootにフルパスを記入すると、ドライブレターが入ることになるのだが、そうすると以下のコードに引っかかることになる。
if repos_root =~ /:/ and repos_root.split(/:/)[1] != "local" then
設定は確実にすることを条件に、この部分をコメントアウトするか、条件分岐などで実行されないように修正する。
cgiのRubyのsystemメソッドでSubversionを実行すると、"svn: Can't determine the user's config path"というエラーが出て実行できない。
Windows版のSubversionでは、"C:\Documents and Settings\user_name\Application Data\Subversion"にconfigが格納されている。cgiから実行すると、IUSR_machine_nameがrubyを実行することになる。IUSR_machine_nameにはそのディレクトリが存在しないので、エラーになってしまうらしい。IUSR_machine_nameの%APPDATA%にSubversionのconfigを置くか、svnコマンドの実行時に、--config-dirオプションで指定をする。IUSR_machine_nameの%APPDATA%を調べる方法(もしくは指定する方法)がよくわからなかったので、今回は一々--config- dirを指定する方法を取っている。
具体的には、hikifarm.confに、以下のような設定を追加して、svnコマンドの引数に挿入している。Subversionディレクトリは、自分の所からコピーした。
$svn_config = '--config-dir "C:\Documents and Settings\LocalService\Application Data\Subversion"'
また、import時に-mオプションでメッセージを指定しているのだが、「'」ではなくて、「"」を使うように修正する。$svn_configもあわせて修正すると、以下のようになる。
修正前
system( "svn import -m 'Starting #{wiki}' . file://#{@root}/#{wiki}/trunk > /dev/null 2>&1" )
修正後
system( "svn import -m \"Starting #{wiki}\" #{$svn_config} . file://#{@root}/#{wiki}/trunk" )
svnコマンドの出力を/dev/nullなどに出力しているが、リダイレクトを一切指定しない用に変更する。最初はnulにリダイレクトしていたのだが、これではうまく動かなかった。
これらsvnコマンドに関する変更は、index.cgiおよびsvn.rbに適用する。
ReposSvn#imported? で、以下のようなコードがある。
open("|svn ls file://#{@root}/#{wiki}") do |f|
これはうまく動かないので、以下のように修正する。
IO.popen("svn ls #{$svn_config} file://#{@root}/#{wiki}") do |f|
hikifarm.confの、repos_rootにはリポジトリのパスを書く。通常はc:/svnのように書くのだが、ここだけは/c:/svnのように、先頭に'/'を入れる必要がある。これは、リポジトリのパスを利用するコードが'file://'にrepos_rootを連結しているため、先頭に'/'がないと、正しいパスにならないためである。
hiki.confに、以下の設定を追加する。これはプラグインのhistory.rbに記述されている。
$repos_type = (defined? repos_type) ? "#{repos_type}" : nil
ディレクトリインデックスにindex.cgiを指定しているのだが、新しく作成したHikiのサイトに関しては何故かうまく動かなかったので、hiki.confのcgi_nameを以下のようにする。
$cgi_name = './index.cgi'