2011-11-14 28 views
5

Quiero mostrar algunos productos de Amazon, cargados a través de Ajax.Rieles: ¿solicitudes HTTP sin bloqueo?

Llamo al método siguiente con Ajax, pero la solicitud demora unos segundos.

@items = [] 
@shows.shuffle.first(5).each do |show| 
    req = AmazonProduct["us"] 
    req.configure do |c| 
     c.key = "###" 
     c.secret = "###" 
     c.tag = "###" 
    end 
    req << { :operation => 'ItemSearch', 
      :search_index => params[:product_type], 
      :response_group => %w{ItemAttributes Images}, 
      :keywords => show.name, 
      :sort => "" } 
    resp = req.get 
    @items << resp.find('Item').shuffle.first 
end 

he nothiced que esta acción se hace con el servidor. Intenté que el sitio se abriera en otra pestaña. Esa pestaña no comenzará a cargarse hasta que se complete la primera pestaña con la llamada Ajax.

¿Cómo puedo solucionar este problema?


Configuración:

Ubuntu 10.10
Rails 3.1.1
de Ruby 1.9.2
gema: https://github.com/hakanensari/amazon_product

Respuesta

0

EDIT:

Solo para aclarar, que depende de la servidor que utiliza en su entorno de desarrollo, no es raíles.

WebRick (servidor http predeterminado en dev) solo puede gestionar una solicitud en ese momento. Cuando implemente su aplicación, debe usar puma, unicornio, Phusion Passenger o cualquier otro servidor que tenga más de un proceso (o subproceso) manejando sus solicitudes.

respuesta VIEJO:

no creo que esto es posible en los carriles.

La forma en que abordaría este problema es crear una aplicación simple sinatra-synchrony que solo tenga acción para recuperar los productos que desee de Amazon.

Para poder enviar una solicitud ajax a esta aplicación, debe apuntar esta aplicación a su dominio (subdominio).

No veo ninguna otra solución, por el momento. Por supuesto, puede tener más de un proceso de solicitud en su servidor, pero esto no resolverá su problema a largo plazo.

Así que para concluir:

AJAX -> amazon-producs-sinatra-app.yourdomain.com 
+0

Oh, esto es algo decepcionante :( – Frexuz

2

Sospecho que esto bloquea debido a que está haciendo su prueba en el modo de desarrollo, utilizando los carriles predeterminados sever, WEBrick.

Según entiendo, webrick solo puede procesar una solicitud a la vez (razón por la cual no se sugiere para uso en producción).

A Rieles nivel de producción cortan, como Phusion de pasajeros, o un grupo de servidores mestizos/delgadas, lo llevará a su concurrencia :)