かなり調整がすんだので、まずは fdiary.net wikifarm 内の「かずひこ空間」と「about fdiary.net」の二つを mod_ruby 対応にしてみました。見たところさくさく動いているようですが、何かお気づきの点などあればお知らせください。
なお、自前のプラグインを mod_ruby hiki 対応にするには、基本的には「$変数名」な部分を「@conf.変数名」にするだけです。
[追記] さらに調子に乗って、以下の Hiki も mod_ruby 化しました。
去年のビットマップフォントの無断複製事件の際にお世話になった、グッデイの代表取締役の前田さんから、フォントについてなどお話ししませんかと誘われて、夕方に京都でお会いしました。直接お会いするのは、去年の関西オープンソフト+フリーウェア 2003 以来ですが、相変わらず情熱的な方でした。
フォントの話だけでなくいろんな話をしていたのですが、私の転職についての話題の時に、「かずひこさんに転職するつもりがあるんだったら、声をかけておけばよかったなぁ」なんてことを言われて、ちょっと驚いたけれど、とても嬉しかった。転職を考えはじめたときに、実は私もグッデイにちょっと関心があったし、そんなこんなで、今後はこれまで以上にいろいろ交流していきましょうというお話をしたのでした。
うーん、今の Hiki の枠組みを極力変えずに複数スタイルに対応しようと
load "#{Hiki::PATH}/style/#{conf.style}/html_formatter.rb" load "#{Hiki::PATH}/style/#{conf.style}/parser.rb" load "#{Hiki::PATH}/messages/#{conf.lang}.rb" load "#{Hiki::PATH}/hiki/db/#{conf.database_type}.rb"
なんてことをやっていると、やはり毎回 load する関係で、error_log に
style/default/html_formatter.rb:11: warning: already initialized constant MAP style/default/parser.rb:26: warning: already initialized constant REF_OPEN style/default/parser.rb:27: warning: already initialized constant REF_CLOSE
というメッセージがやたら出るはめになりました。
根本的な対策としては、tDiary のようにスタイルによって異なるクラス名でこのへんを定義した上で、load ではなく require で読み込むべきでしょうね。とりあえず上記のワーニングを無くすには、定数ではなく変数で定義すればいいのだけれど、それはあまりに ad hoc すぎだし、きっとコストも高くなるかな。
で、結局うちの wikifarm では lang 以外 (つまり style と database_type) は全て同一の設定なので、上記の部分を
require "style/#{conf.style}/html_formatter" require "style/#{conf.style}/parser" load "#{Hiki::PATH}/messages/#{conf.lang}.rb" require "hiki/db/#{conf.database_type}"
と変更することで逃げました。一番 ad hoc な対策だけれど、毎回 load しなくなった分ちょっとは速くなったはず。
まあ、予想よりは少ない変更点で mod_ruby で動かせるようになったわけだけれど、そろそろリファクタリングすべきかなぁ。特にやるべきポイントは見えてきたような気がするし。