Farad ay Timeout error ReadTimeout при отправке пользовательских данных на удаленный веб-сервер

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

Ошибка:

Farad​ay::E​rror:​:Time​outEr​ror: ​Net::​ReadT​imeou​t

Больше информации: я также не могу воспроизвести его, я пытался ничего не возвращать рельсам, но это выдает другую ошибку.

Когда я смотрю на другие темы SO, у меня нет реального решения этой проблемы, некоторые предлагают увеличить время ожидания, но я думаю, что оно довольно высокое.

Выполнить запрос (выполняет запрос POST/GET):

def perform_request(verb, path, params = nil, body = nil)
  conn = connection.dup
  params ||= {}
  # If params contains a token, it will used the `named` routes and
  # set an authorization header
  if params[:token]
    path = ["named", path].join("/")
    conn.headers["Authorization"] = "Basic #{params.delete(:token)}"
  else
    path = ["anonymous", path].join("/")
  end

  # Remote service expects each body sent to it to be xml-encoded.
  conn.headers["Content-Type"] = "application/xml"
  conn.send(verb, path) do |request|
    log "Path   : #{verb.upcase} #{default_url}#{path}"
    log "Params : #{params.inspect}"
    log "Body   : #{body.inspect[0..1000]}"

    request.params = params if params
    request.body = body if body
    request.options[:timeout] = 120          # open/read timeout in seconds
    # request.options[:open_timeout] = 15      # connection open timeout in seconds
  end
end

Связь:

def connection
  @connection ||=
    begin
      conn = Faraday.new(default_url) do |b|
      b.use FaradayMiddleware::Mashify
      b.use FaradayMiddleware::ParseJson, :content_type => /\bjson$/
      b.adapter Faraday.default_adapter
    end
      conn.headers['User-Agent'] = 'be.company.hidden'
      conn
    end
end

Другая информация о версии:

gem "faraday", "~> 0.8.1"
gem "faraday_middleware", "~> 0.8.8"
gem 'rails', '3.2.17'

Спасибо всем, у кого есть предложения по устранению этой проблемы.

1 ответ

Решение

Этот тайм-аут произошел от nginx http://nginx.org/en/docs/http/ngx_http_core_module.html

Мы установили тайм-аут на 120 с, и теперь эта ошибка больше не возникает.

Другие вопросы по тегам