如何为Timeout :: error定义一个类范围的救援方法?

时间:2012-04-30 16:27:59

标签: ruby-on-rails ruby timeout savon

我有一个使用savon作为gem来与SOAP API交谈的类。有时服务器无法访问,因此实现soap方法的方法会抛出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 个答案:

答案 0 :(得分:3)

我认为你可以使用rescue_from。您可以在此处阅读:http://api.rubyonrails.org/classes/ActiveSupport/Rescuable/ClassMethods.html

简而言之,您可以将它放在应用程序控制器中:

rescue_from 'Timeout::Error' do |exception|
  # Rescue logic here.
end