如何解决超时问题(Ruby,Rails)

时间:2010-03-03 09:52:21

标签: ruby-on-rails ruby

我的大多数应用都与网络服务有很大关系,而且由于第三方网站的原因,我会遇到超时问题。

这是我得到的错误:

  execution expired
  /usr/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill'

如何在rails应用程序中挽救此类错误?

3 个答案:

答案 0 :(得分:29)

根据您使用库的方式,有不同的方法来挽救例外。

在图书馆

假设您创建了一个包装器来访问某种Web服务,您可以让包装器解除异常并始终返回“安全”数据。

在行动中

如果您在操作中调用特定方法,并且方法成功是操作的要求,那么您可以在操作中挽救它。 在下面的示例中,我解除了错误并显示了一个特定的模板来处理问题。

def action
  perform_external_call
rescue Timeout::Error => e
  @error = e
  render :action => "error"
end

在控制器中

如果方法调用可以在许多不同的操作中进行,则可能需要使用rescue_from

class TheController < ApplicationController

  rescue_from Timeout::Error, :with => :rescue_from_timeout

  protected

  def rescue_from_timeout(exception)
    # code to handle the issue
  end

end

答案 1 :(得分:4)

为您的机架应用使用真棒Rack::Timeout gem

然后使用Simone的控制器善良

答案 2 :(得分:2)

这就是我在rails应用中所做的事情:

# in ApplicationController
rescue_from Your::Exception, :with => :handle_exception

protected

def handle_exception
  # do anything you want here
end

您可以像在救援条款中那样指定例外。

问候, 乔