ポータブルな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。