Я использую некоторый 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 выше. Есть ли причина, по которой begin - rescue не поймает это исключение?