Как определить метод спасения для класса Timeout::error?
У меня есть класс, который использует savon в качестве драгоценного камня для общения с SOAP API. Время от времени сервер недоступен, поэтому методы, которые реализуют методы мыла, Timeout::Error
, Это не проблема, чтобы осуществить спасение как это:
begin
...
rescue Timeour::Error
...
end
Но у меня есть ~50 определенных методов, которые могут быть затронуты, и я не хочу повторять один и тот же код 50 раз. Это абсолютно не сухой. Есть ли способ справиться с этим? Я уже думал о чем-то вроде этого:
def safe_call method, params
begin
self.send method, params
rescue Timeour::Error
# do sth heroic to rescue the method
end
end
Но это довольно неприятно, потому что я должен менять каждый вызов во всех сценариях, которые используют класс. Есть ли способ сделать спасение всего класса?
1 ответ
Я думаю, что вы можете использовать rescue_from. Вы можете прочитать об этом здесь: http://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html
Короче говоря, вы можете поместить это в свой контроллер приложений:
rescue_from 'Timeout::Error' do |exception|
# Rescue logic here.
end