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 のフルパスが設定されるんだけど...(?_?