mittyです。
counter.rb rev 1.25に於いて私の環境にて
* 突然カウンタが進まなくなる(数字自体は表示される)
* cache/counter/counter2*.datの更新日時(mtime)が変化しなくなる
* counter2_access.datを削除すると正常に戻るが一日程度するとまた振り出し
に戻る
という現象が起きたので調べてみたところ、
* 313行目の db.transaction do で marshal data too short というException
が発生
* 直後にrescueがあるがこれは @access = db["accessdata"] 対象なのでその
まま296行目のTDiaryCounter.run()内のrescueまで戻ってしまう。
* run()からそのまま抜けてしまうので、破損(?)したcounter2_access.datはそ
のまま。
ということになっていました。何故counter2_access.datが破損するのかまでは
分からなかったので他にも何か問題があるのかも知れませんが、とりあえず以下
のようにpatchを当てることで回避しています。
# ところで、"marshal data too short"で検索すると
# http://wiki.rubyonrails.org/rails/pages/MarshalDataTooShort このような
# 情報が見つかったのですが、これは既に修正済なのでしょうか…?
# /ruby/lib/ruby/1.8/pstore.rb を見た限りでは直っているように見えるので
# 大丈夫なのかな…
--- counter.rb.old 2006-02-08 21:23:41.987000000 +0900
+++ counter.rb 2006-02-12 23:35:41.784750000 +0900
@@ -295,6 +295,13 @@
cookie = main(cache_path, cgi, options, timer, dir, path, today)
rescue => e
@cnt = TDiaryCountData.new(dir).load
+ if e.message =~ /marshal data too short/i
+ begin
+ File.unlink path
+ rescue
+ end
+ end
+ cookie = main(cache_path, cgi, options, timer, dir, path, today)
end
cookie
end
トレースするためにデバッグ出力を書き散らしたのでそれも貼ろうかと思ったの
ですが無駄に長いので、(counter.rbをdiffしたら14KBにもなったので…)
もし必要であればその旨ご連絡ください。
ではでは。
--
Ken-ichi Mito <mitty@mitty.jp>
|