我的大部分应用程序都与Web服务有很大关系,并且经常由于第三方网站而导致超时问题。如何解决超时问题(Ruby,Rails)
这是我的错误:
execution expired
/usr/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill'
如何拯救这种错误在Rails应用程序?
我的大部分应用程序都与Web服务有很大关系,并且经常由于第三方网站而导致超时问题。如何解决超时问题(Ruby,Rails)
这是我的错误:
execution expired
/usr/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill'
如何拯救这种错误在Rails应用程序?
取决于你如何使用图书馆,也有不同的方式来拯救例外。
在图书馆
假设您创建了一个包装访问某些类型的网络服务,你可以包装抢救例外,总是返回一个“安全”的数据。
在操作
如果调用在采取行动的具体方法和方法的成功是对动作的要求,那么你可以在行动拯救它。 在以下示例中,我挽救了该错误并显示了处理该问题的特定模板。
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
这是我在我的Rails应用做:
# in ApplicationController
rescue_from Your::Exception, :with => :handle_exception
protected
def handle_exception
# do anything you want here
end
您可以指定例外,就像您在课程的救援条款做。
问候, 乔
使用真棒Rack::Timeout创业板机架应用
然后使用Simone的控制器善良
决不救'Exception'。是一种糟糕的编程习惯。你应该拯救特定的例外,或者至少,'StandardError'。 – 2010-03-03 10:09:34
“异常”是为了澄清在哪里抓住特定的一个,但你是对的,这应该是更清楚了! :) – xijo 2010-03-03 11:40:22
我有点知道如何做到这一点没有找到ActiveRecord。我只是不知道如何解决这个特定的错误。 – kgpdeveloper 2010-03-04 11:22:43