tutorial restful restclient rails practices crear best ruby-on-rails rest-client

ruby-on-rails - restful - ruby on rails tutorial



ruby rest-client: ¿hacer que nunca se agote el tiempo? (6)

Esta sintaxis establece el tiempo de espera como encabezado de solicitud (consulte la firma RestClient.post), si desea usar el parámetro de tiempo de espera, debe usar:

RestClient::Request.execute(:method => :post, :url => @url, :timeout => 90000000)

consulte: https://github.com/rest-client/rest-client/blob/master/lib/restclient/request.rb#L12

Estoy tratando de usar ruby rest-client para cargar una gran cantidad de imágenes a un sitio que estoy escribiendo. Mi código se ve como:

RestClient.post url, :timeout => 90000000, :open_timeout => 90000000, :file_param => file_obj

Sin embargo, estoy recibiendo este error:

RestClient::RequestTimeout: Request Timeout from /Library/Ruby/Gems/1.8/gems/rest-client-1.6.1/lib/restclient/request.rb:174:in `transmit'' from /Library/Ruby/

Pero cuando miro el registro del servidor

Completed in 61493ms (View: 2, DB: 1) | 201 Created

Así que no parece haber ninguna razón por la que esto sea un tiempo de espera. ¿Alguien tiene alguna idea de si hay un parámetro de tiempo de espera que no estoy configurando correctamente?

Gracias


Estoy teniendo problemas similares. Una rápida inmersión en la fuente revela este poco de hostilidad:

def self.post(url, payload, headers={}, &block) Request.execute(:method => :post, :url => url, :payload => payload, :headers => headers, &block) end

A menos que me falte algo, las opciones de tiempo de espera no se transfieren a la solicitud subyacente. Tiempo para un parche ...


He usado el siguiente código y funciona como un amuleto como lo señaló Richard

resource = RestClient::Resource.new "url", :timeout => $TIMEOUT, :open_timeout => $OPEN_TIMEOUT response = resource.get :params => { ..... }


Mirando los documentos, puede pasar -1 a través de RestClient.execute timeout param:

# * :timeout and :open_timeout passing in -1 will disable the timeout by setting the corresponding net timeout values to nil

Se puede utilizar de la siguiente manera:

resource = RestClient::Resource.new( "url", :timeout => -1, :open_timeout => -1 response = resource.get :params => {<params>}


RestClient :: Resource.new () le permite configurar: timeout y: open_timeout que se pasarán al método Request.execute, cuando use los métodos get, post, put, etc del recurso.


Ya uso RestClient.get y RestClient.post ampliamente, por lo que para mí fue más fácil usar RestClient ''Monkey Patch''. Recomendaría usar RestClient::Resource.new o RestClient::Request.Execute si es posible.

Sin embargo, como soy perezoso y no quiero cambiar cada vez que RestClient.get / RestClient.post en mi código, he decidido tomar un atajo.

$timeout = 30 $open_timeout = 30 module RestClient2 include RestClient def self.get(url, headers={}, &block) Request.execute(:method => :get, :url => url, :headers => headers, :timeout => $timeout, :open_timeout => $open_timeout, &block) end def self.post(url, payload, headers={}, &block) Request.execute(:method => :post, :url => url, :payload => payload, :headers => headers, :timeout => $timeout, :open_timeout => $open_timeout, &block) end end

Y que acabo de reemplazar rápidamente RestClient.get / post con RestClient2.get / post.

Sería bueno si RestClient::Request tuviera un tiempo de espera predeterminado especificado, como:

@timeout = args[:timeout] || 30 @open_timeout = args[:open_timeout] || 30