Как устранить проблемы с таймаутом (Ruby, Rails)

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

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

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

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

Ответ 1

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

В библиотеке

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

В действии

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

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

Ответ 2

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

Затем используйте настройку контроллера Simone

Ответ 3

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

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

protected

def handle_exception
  # do anything you want here
end

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

Привет, Джо