Farad ay Timeout error ReadTimeout при отправке пользовательских данных на удаленный веб-сервер
Проблема: у меня возникает следующая ошибка от Фарадея, когда я отправляю данные в наш удаленный веб-сервис. Эта ошибка возникает в случайных случаях со случайными пользователями.
Ошибка:
Faraday::Error::TimeoutError: Net::ReadTimeout
Больше информации: я также не могу воспроизвести его, я пытался ничего не возвращать рельсам, но это выдает другую ошибку.
Когда я смотрю на другие темы 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 с, и теперь эта ошибка больше не возникает.