большинство моих приложений имеет непосредственное отношение к веб-сервисам и часто из-за стороннего сайта, я получаю проблемы тайм-аута.
Это - ошибка, которую я получаю:
execution expired
/usr/lib/ruby/1.8/timeout.rb:54:in `rbuf_fill'
Как я спасаю этот вид ошибки в приложении для направляющих?
В зависимости от того, как вы используете библиотеку, есть разные способы спасти исключение.
В библиотеке
Предполагая, что вы создали оболочку для доступа к какой-либо веб-службе, вы можете использовать оболочку для восстановления исключения и всегда возвращать «безопасные» данные.
В действии
Если вы вызываете определенный метод в действии, и успех метода является требованием для действия, вы можете спасти его в действии. В следующем примере я спасаю ошибка и покажите конкретный шаблон для решения проблемы.
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
Вы можете указать исключение, как вы бы сделали это в условии спасения, конечно.
Приветствую, Джо