«前の日記(2006-09-17(Sun)) 最新 次の日記(2006-09-26(Tue))» 編集

これ日記なん?


2006-09-18(Mon) [長年日記]

_ [Rails][Radiant]mongrelでRadiant動いた!

gem clean で古いものを一掃したら、mongrelが動かなくなった。で、mongrelを再インストールしたら見事に動いた。なんかおかしくなってたみたい。

_ [Hiki]Hikifarmのindex.cgiをコピーしなくてもいいようにする方法

hikifarmを設定するときに、hiki/misc/hikifarm/index.cgi, hiki/misc/hikifarm/hikifarm.conf を公開ディレクトリにコピーするようになっていますが、

  • 当方Windowsなのでコピー時に#!書き換えの一手間必要
  • そもそもコピーを忘れやすい。

ので、公開ディレクトリに本体をコピーしないでセットアップしたいなーと思っていました。今日いろいろやってみたらできたみたいなので書いてみます。まずい箇所あったら指摘していただけるとウレシス。

hikifarm.confを2回読むのはどうなん?という気もしますが。

index.cgi

#!c:/ruby/bin/ruby

hiki=''
eval(File.read('hikifarm.conf').untaint)
$:.unshift "#{hiki}"
load "#{hiki}/misc/hikifarm/index.cgi"

if __FILE__ == $0 || ENV['MOD_RUBY']
  $SAFE = 1
  $:.delete(".") if File.writable?(".")
  conf = HikifarmConfig.new
  $:.unshift(conf.hiki)
  App.new(conf).run
end

patch

--- index.cgi.orig	Mon Sep 18 12:41:00 2006
+++ index.cgi	Mon Sep 18 13:59:47 2006
@@ -125,7 +125,7 @@
     @wikilist = []
     @farm_pub_path = farm_pub_path

-    Dir["#{farm_pub_path}/*"].each do |wiki|
+    Dir["#{@farm_pub_path}/*"].each do |wiki|
       wiki.untaint
       next if not FileTest.directory?(wiki)
       next if FileTest.symlink?(wiki)
@@ -471,7 +471,7 @@
 class App
   def initialize(conf)
     @conf = conf
-    @farm = Hikifarm.new(File.dirname(__FILE__), @conf.ruby, @conf.repos_type, @conf.repos_root, @conf.data_root)
+    @farm = Hikifarm.new(File.dirname('hikifarm.conf'), @conf.ruby, @conf.repos_type, @conf.repos_root, @conf.data_root)
     @cgi = conf.cgi
   end

_ [Hiki]ついでに思ったところをつらつらと。

hikifarm/index.cgi は中にEUC文字列を含んでいるので、Windowsのメモ帳でそーっと書き換え(たとえばサーバ室にいて、おきにのエディタをセットアップしてなかったサーバをひとりでいじってるところを想像していただきたい)したつもりでみごとに文字化けさせたりってのは私だけでしょうか?これも分離したいなあ。プラグインみたいに依存部分を切り出せばいいのかしら?

それから、HikiFarm, HikiFarmIndexPage, HikiFarmRSSPage の各引数に HikiFarmConfigのattributeをバラして渡してるのはなんか意味があるんでしょうか?@confそのままじゃだめなん?

ついでに、ソース読んでてわかんなかったところを書いておこう。HikiFarmConfigのloadメソッドにこういうのがある。

   if FileTest::symlink?( __FILE__ ) then
     hikifarm_template_dir = File::dirname( File::expand_path( File::readlink( __FILE__ ) ) ) + '/template'
   else
     hikifarm_template_dir = File::dirname( File::expand_path( __FILE__ ) ) + '/template'
   end

ここの__FILE__って、公開ディレクトリにコピーされたindex.cgiではないのかな?実際にはみごとにhikifarm_template_dir には hiki/misc/hikifarm/template のフルパスが設定されるんだけど...(?_?