2011-11-14 45 views
5

Tôi muốn hiển thị một số sản phẩm của Amazon, được tải qua Ajax.Đường ray - Không chặn yêu cầu HTTP?

Tôi gọi phương thức bên dưới bằng Ajax, nhưng yêu cầu mất một vài giây.

@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 

Tôi không biết rằng Hành động này chặn máy chủ. Tôi đã thử mở trang web trong một tab khác. Tab đó sẽ không bắt đầu tải cho đến khi tab đầu tiên với cuộc gọi Ajax hoàn thành.

Tôi làm cách nào để giải quyết vấn đề này?


Setup:

Ubuntu 10.10
Rails 3.1.1
của Ruby 1.9.2
Gem: https://github.com/hakanensari/amazon_product

Trả lời

0

EDIT:

Chỉ cần làm rõ, nó phụ thuộc vào máy chủ bạn sử dụng trong môi trường phát triển của bạn, nó không phải là đường ray.

WebRick (máy chủ http mặc định trong dev) chỉ có thể xử lý một yêu cầu tại thời điểm đó. Khi bạn triển khai ứng dụng của mình, bạn nên sử dụng puma, unicorn, Phusion Passenger hoặc bất kỳ máy chủ nào khác có nhiều quá trình (hoặc thread) xử lý các yêu cầu của bạn.

OLD Trả lời:

Tôi không nghĩ rằng điều này là có thể trong đường ray.

Cách tôi tiếp cận vấn đề này là tạo ứng dụng sinatra-synchrony đơn giản chỉ có tác vụ tìm nạp sản phẩm bạn muốn từ amazon.

Để có thể gửi yêu cầu ajax đến ứng dụng này, bạn cần trỏ ứng dụng này đến miền của bạn (tên miền phụ).

Tôi không thấy bất kỳ giải pháp nào khác, vào lúc này. Tất nhiên bạn có thể có nhiều hơn một quá trình ứng dụng trên máy chủ của bạn, nhưng điều này sẽ không giải quyết được vấn đề của bạn trong thời gian dài.

Vì vậy, để quấn lên:

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

Ồ, điều này là hơi thất vọng :( – Frexuz

2

tôi nghi ngờ khối này bởi vì bạn đang làm thử nghiệm của bạn trong chế độ phát triển, sử dụng Rails mặc định cắt đứt, Webrick.

Sự hiểu biết của tôi là webrick chỉ có thể xử lý một yêu cầu tại một thời điểm (đó là lý do tại sao nó không được đề xuất để sử dụng sản xuất).

Một Rails mức sản xuất cắt đứt, như Phusion tải hành khách, hoặc một cụm thú lai/máy chủ mỏng, sẽ giúp bạn có được đồng thời bạn :)

Các vấn đề liên quan