В зависимости от того, как вы используете библиотеку, существуют разные способы восстановления исключения.
В библиотеке
Предполагая, что вы создали оболочку для доступа к какому-либо веб-сервису, вы можете заставить оболочку спасать исключение и всегда возвращать "безопасные" данные.
В действии
Если вы вызываете определенный метод в действии, и успех метода является требованием для действия, вы можете спасти его в действии.
В следующем примере я спасаю ошибку и показываю специальный шаблон для решения проблемы.
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