ポータブルなwiki

前々から、プロジェクト本体のwikiを持ち運んで、外でそれを参照したり書き込んだりしたあとにマージできる分散VCSみたいな感じのwikiがないかなぁと思っていたら、まんまのがあった。
git-wiki: a git-powered wiki

ざっくりソースを眺めましたが、200行強でwikiがつくれるとは、rackとhamlの力があるとはいえすごいですね。

しかし、会社PCはwindowsでありRubyは1.9ということでハードルが高い(そもそも必用としているraiscountがCのライブラリを必用とするため、めんどい)ので、家のmacbook(ruby1.9)でやってみましたが、もう血がざっくざくで、今日はあきらめ。

とりあえず、はまったところをいくつか。

まず、一個目は File.dirname。とりあえず、起動一発目ででてきたエラー

./run.ru:2:in `block in <top (required)>': undefined method `dirname' for Rack::File:Class (NoMethodError)

rack 起動用(?)のrun.ru の先頭で git-wiki.rb を require している部分は以下のようになっている。

require File.dirname(__FILE__) + "/git-wiki"

この File が Rack::File になってしまっているようだ。一応、ruby1.8で実行するとこの部分のエラーは発生しなかった(他の部分でうまく動いていないのですが)。ちなみに、1.8で起動したときの require 部分の File は File クラス。

で、ソースをずっと追っかけると rack.rb 内で File を autoload で Rack::File に置き換えていた。るりまとか見る限りは autoload の挙動は変わっていないようなので、これは gem がデフォルトで入るようになったせいなのかしら?
とりあえず、File.dirname 使わないようにすることで回避

で、File.dirname を回避した次はこれ。

/opt/local/lib/ruby1.9/gems/1.9.1/gems/mime-types-1.15/lib/mime/types.rb:1531:in `<top (required)>': undefined method `each' for #<String:0x5177f0> (NoMethodError)
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/mojombo-grit-0.9.4/lib/grit.rb:20:in `require'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/mojombo-grit-0.9.4/lib/grit.rb:20:in `<top (required)>'

まぁ、これは1.9を使うと避けて通れない道なので、each_lineに変更した。

さらにでたのがこれ。

/opt/local/lib/ruby1.9/gems/1.9.1/gems/mojombo-grit-0.9.4/lib/grit.rb:36:in `require': /opt/local/lib/ruby1.9/gems/1.9.1/gems/mojombo-grit-0.9.4/lib/grit/index.rb:95: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n' (SyntaxError)
/opt/local/lib/ruby1.9/gems/1.9.1/gems/mojombo-grit-0.9.4/lib/grit/index.rb:100: syntax error, unexpected keyword_when, expecting keyword_end
          when Hash:
              ^
/opt/local/lib/ruby1.9/gems/1.9.1/gems/mojombo-grit-0.9.4/lib/grit/index.rb:121: syntax error, unexpected keyword_end, expecting $end
end # Grit
   ^
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/mojombo-grit-0.9.4/lib/grit.rb:36:in `<top (required)>'
	from /Users/taka/src/git-wiki/git-wiki.rb:5:in `require'

Ruby1.8では case 文の when の行末に ":" がつけれましたが、Ruby1.9 から使えなくなったというやつですね。これは、昨年ぐらいに会社の人が Ruby で書いたラムダ計算用インタプリタを1.9で動かそうとして失敗していたので、さくっと回避。

で、巡り巡って、また Rack::File によるエラーにあたりました。

./run.ru:5:in `block in <top (required)>': undefined method `expand_path' for Rack::File:Class (NoMethodError)
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/rack-0.9.1/lib/rack/builder.rb:29:in `instance_eval'
	from /opt/local/lib/ruby1.9/gems/1.9.1/gems/rack-0.9.1/lib/rack/builder.rb:29:in `initialize'
	from ./run.ru:1:in `new'
	from ./run.ru:1:in `<top (required)>'

とりあえず、今日はここまで。

Ruby1.9 で Rack が使えないのかなぁと思っていたけど、yhara さんは使えているみたいだしなぁ。鬼門です1.9。