Scarletでsyntax_error
自宅Debianサーバで、今までapt-get updgradeしか実行していなかったんですが、数十件の保留パッケージがたまっていたので新年を機にdist-upgradeで更新してしまうことにしました。
ほとんどのメインサービスは動作確認で問題なかったんですが、RubyのScarletというメール転送システムでsyntax_errorが発生するようになってしまいました。
/var/log/mail.logを見ると
Jan 4 00:57:18 HOGE qmail: 1136303838.145520 delivery 3886: deferral: ./scarlet.rb:407:_syntax_error/______log(_SEV_INFO,_"Amail_arrived_from_'#{_@mail.searchHeader(_\"from\"_)[0]_}'_to_'#{_@mail.searchHeader(_\"to\"_)[0]_}'."_)/ __________________________________________________________________ ^/./scarlet.rb:407:_syntax_error/______log(_SEV_INFO,_"A_mail_arrived_from_'#{_@mil.searchHeader(_\"from\"_)[0]_}'_to_'#{_@mail.searchHeader(_\"to\"_)[0]_}'."_)/ ______________________________________________________________________________________________________________ ^/./scarlet.rb:407:_syntax_error/./scarlet.rb:479:_syntax_erro/./scarlet.rb:482:_syntax_error/./scarlet.rb:486: _syntax_error/./scarlet.rb:574:_syntax_error/./scarlet.rb:583:_module_definiton_in_method_body/./scarlet.rb:586: _class_definition_in_method_body/./scarlet.rb:656
ということで、よくわからないのですがどうもlog()メソッドがないために発生しているような雰囲気。
調べてみると、libdevel-logger-rubyというDebianパッケージをいれるとよさそうな雰囲気なんですが、libdevel-logger-ruby1.8というパッケージもあってどっちを入れたものやら。Debian初心者としては迷うところ。
依存性を確認してみると
- libdevel-logger-ruby1.8は、それだけでインストール可能
- libdevel-logger-rubyは、自動的にlibdevel-logger-ruby1.8もインストールされる
という感じで、大は小を兼ねるということで後者をいれておけばいいのかなと勝手に思うことにします。
追記
結局、なんだか本当にSyntaxErrorのような気がしてきました。
エラー該当行にStringリテラルで
"aaa '#{ hoge(\"aaa\")[0] }' bbb"
みたいな記述があったので
"aaa '" + hoge("aaa")[0] + "' bbb"
としてみたらとりあえず違う振る舞いになりました。
qmailレベルでのエラーではなくて、scarlet.logに出力される
F, [2006-01-04T01:48:14.770736 #5338] FATAL -- Scarlet: Detected an exception. Stopping ... undefined method `downcase' for nil:NilClass ./scarlet.rb:144:in `searchHeader' ./scarlet.rb:143:in `each' ./scarlet.rb:143:in `searchHeader' ./scarlet.rb:516:in `matchCondition' ./scarlet.rb:509:in `each' ./scarlet.rb:509:in `matchCondition' ./scarlet.rb:427:in `run' ./scarlet.rb:426:in `each' ./deffile.rb:18:in `each' ./deffile.rb:18:in `each' ./scarlet.rb:426:in `run' /usr/lib/ruby/1.8/devel/logger.rb:566:in `start'
こんな感じのエラーに。
でも今日中に正常動作まではもっていけなさそう。ふーむ。