2007-04-15
Link 検索のための応急処置
この日記(tdiary)で検索ができなくなっていることに気がついた。検索のできないWebページは索引のない書籍と同じで価値が大きく損なわれると信じているし、何より私自身が不便だ。具体的には、次のようなエラーが出る。
q=Excel VBA undefined method `strip' for nil:NilClass
tdiarysearchの最新版に置き換えると、今度はInternal Server Errorとなった。diffにかけても違いは「TDiary::Config.new(cgi)」の「(cgi)」の有無だけなので、今回の件とは関係なさそうである。いつの間にかレンタルサーバーのRubyのバージョンが1.8.5になっているので、これと関係があるのかもしれない。
私はRubyについて完全な素人なので、雰囲気を頼りに対処する。今回はstripメソッドが使われている箇所が関数1つに集約されていたので運がよかった。
def load_tdiary_textdb(path)
File.open(path) {|f|
ver = f.gets.strip
raise "unkwnown format: #{ver}" unless ver == 'TDIARY2.00.00'
f.each('') do |header|
h = {}
header.untaint.strip.each do |line|
n, v = *line.split(':', 2)
h[n.strip] = v.strip
end
yield h, f.gets("\n.\n").chomp(".\n").untaint
end
}
end
上が問題の関数なのだが、ぜんぜんわからないことだけは自信をもって言える。特にuntaintに至っては想像もつかない。いくつかあるstripのうち、とりあえず異バージョンで例外を投げるverとraiseとの行はコメントアウト。残念、まだ同じエラーが出る。nilがらみの話なので、最後のstripをifブロックで囲ってみた。
if v h[n.strip] = v.strip end
これがビンゴで、少なくとも私の環境では動くようになった。そのうち正式に対処されまで、これでしのぐことになる。
ぜんぜん関係ないけれど、私はRubyを「ルビー」ではなしに「ルビ」と読んでしまう。印刷に興味をもっていた名残だ。あと、JavaScriptの「MochiKit」は直方銘菓「もち吉」に見えてしまう。この理由は不明だ。
[ツッコミを入れる]
[]