Как избавиться от проблем тайм-аута (Ruby, Rails) - PullRequest
11 голосов
/ 03 марта 2010

большинство моих приложений имеют много общего с веб-сервисами, и часто из-за стороннего сайта возникают проблемы с тайм-аутом.

Это ошибка, которую я получаю:

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

Как мне спасти такую ​​ошибку в приложении rails?

Ответы [ 3 ]

29 голосов
/ 03 марта 2010

В зависимости от того, как вы используете библиотеку, существуют разные способы восстановления исключения.

В библиотеке

Предполагая, что вы создали оболочку для доступа к какому-либо веб-сервису, вы можете заставить оболочку спасать исключение и всегда возвращать "безопасные" данные.

В действии

Если вы вызываете определенный метод в действии, и успех метода является требованием для действия, вы можете спасти его в действии. В следующем примере я спасаю ошибку и показываю специальный шаблон для решения проблемы.

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
4 голосов
/ 16 ноября 2011

Используйте удивительный Rack :: Timeout драгоценный камень для ваших приложений стойки

Тогда используйте добро контроллера Симоны

2 голосов
/ 03 марта 2010

это то, что я делаю в своих приложениях rails:

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

protected

def handle_exception
  # do anything you want here
end

Вы можете указать исключение, как если бы вы, конечно, указывали в предложении о спасении.

Привет, Джо

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...