我使用一些包裹在开始 - 救援块中的ruby代码,但不知何故它仍然崩溃。开始救援不捕捉错误
的代码块看起来是这样的:
# Retrieve messages from server
def get_messages
@connection.select('INBOX')
@connection.uid_search(['ALL']).each do |uid|
msg = @connection.uid_fetch(uid,'RFC822').first.attr['RFC822']
begin
process_message(msg)
add_to_processed_folder(uid) if @processed_folder
rescue
handle_bogus_message(msg)
end
# Mark message as deleted
@connection.uid_store(uid, "+FLAGS", [:Seen, :Deleted])
end
end
鉴于此代码,我会假设,如果process_message或add_to_processed_folder不能再执行救援会踢,并呼吁handle_bogus_message。这就是说,我在生产环境中运行这段代码,有时当我“收到”一封电子邮件(这是从一个rake任务运行的)时,它会以SyntaxError而死亡。
对于看看错误消息检查出http://pastie.org/1028479和不是process_message,它指的是相同的process_message上方。是否有任何理由为什么开始 - 救援会不会发现此异常?
'rescue'并不拯救'Exception'的原因默认情况下是因为他们通常被认为太难救了。 – 2010-07-06 03:16:29