「セグメンテーション違反」が出るようになってしまったPlaggerですが、ようやく復旧しました。
分かってみると「なんでもっと早く気付かなかったんだろう」とも思えますが…、備忘録代わりに書いておきます。
Webで調べてみたら、Filter::Dedupedのデータベースが怪しそう
「plagger segmentation fault」でググってみると、Filter::Dedupedのデータベースが壊れていたりすると、セグメンテーション違反が起きる場合がある、ということが分かりました。早速、Deduped.dbを探して削除してみたのですが…、残念ながら相変わらずセグメンテーション違反が発生してしまいます。
もうちょっと気合いを入れて調べ直します。
問題が発生するのはBundle::Planetだけみたい
色々と試していくうちに、Bundle::Planetを使っているとセグメンテーション違反が発生することが分かってきました。試しにBundle::Planetとなっているところを、Publish::Feedとかに変えてみると、問題なく動いてくれます。Bundle::Planetのソースを見てみることにします。
HTML::Tidyが怪しい
Plugin/Bundle/Planet.pmを見てみます。中で次のモジュールをロードしています。
Filter::StripTagsFromTitle
Filter::HTMLTidy (if HTML::Tidy is available)
Filter::HTMLScrubber
Filter::GuessTimeZoneByDomain
SmartFeed::All
Publish::Planet
Publish::Feed
Publish::OPML
Publish::FOAFRoll
これらのモジュールをロードしているところを、一つずつコメントアウトして試して見ると…、
Filter::HTMLTidy (if HTML::Tidy is available)
をロードしないようにすると、無事動くことが分かりました。
grepしてみると、Filter::HTMLTidyを使っているのはBundle::Planetだけのようです。HTML::Tidyを削除してしまえば良いのかもしれませんが、とりあえずFilter::HTMLTidyをロードする所をコメントアウトするだけで様子を見ることにしています。
今回の教訓:無闇にモジュールの削除/再インストールをせず、まずは原因の切り分けを行いましょう。
って、当たり前のことですね…。
トラックバック
このエントリーのトラックバックURL:
http://www.simazaki.com/~izumi/cgi-bin/tt-cgi/tt_tb.cgi/494