前回の記事でmod_rewriteのRewriteMapを使い、なんちゃってフェイルオーバーを作ってみましたが、どうもたまにヘルスチェックをおこなうrubyのスクリプトが落ちるわけです・・・。
エラーはこんな感じ。
/usr/lib/ruby/1.8/timeout.rb:54:in `open': execution expired (Timeout::Error)
from /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/lib/ruby/1.8/timeout.rb:56:in `timeout'
from /usr/lib/ruby/1.8/timeout.rb:76:in `timeout'
from /usr/lib/ruby/1.8/net/http.rb:560:in `connect'
from /usr/lib/ruby/1.8/net/http.rb:553:in `do_start'
from /usr/lib/ruby/1.8/net/http.rb:542:in `start'
from /usr/local/etc/shells/healthcheck.rb:30rescueで捕捉しているのにどうしてだろう?と思っていたのですが、下記のような記事を発見。どうやら今のやり方では、Timeout::Errorの例外は捕捉してくれないようです。
Net::HTTPの例外補足方法 - OVERT MEMO
さっそく以下のように修正。
begin
http = Net::HTTP.new(hostname, port ? port : 80)
http.open_timeout = HTTP_TIMEOUT
http.read_timeout = HTTP_TIMEOUT
http.start {|p| response = p.head(path ? path : '/') }
rescue Exception # ここを修正
#
end
コメント(0件)
コメントを投稿
コメントは承認後に公開されます。メールアドレスは公開されません。