2011-11-14 9 views
5

Ajax経由でロードされたAmazon製品を表示したいです。Rails - 非ブロックHTTPリクエスト?

私はAjaxで以下のメソッドを呼び出しますが、リクエストには数秒かかります。

@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 

私はこのアクションがサーバーをブロックしていることに気づきませんでした。私は別のタブでサイトを開こうとしました。そのタブは、Ajax呼び出しの最初のタブが完了するまで読み込まれません。

どうすればこの問題を解決できますか?


セットアップ:

のUbuntu 10.10
のRails 3.1.1
ルビー1.9.2
宝石:https://github.com/hakanensari/amazon_product

答えて

0

EDIT:

だけ明確にする、それが依存しますあなたの開発環境で使用するサーバであり、レールではありません。

WebRick(デフォルトのhttpサーバーin dev)は、その時点で1つの要求しか処理できません。アプリケーションを配備するときは、puma、unicorn、Phusion Passenger、または要求を処理する複数のプロセス(またはスレッド)を持つ他のサーバーを使用する必要があります。

OLD回答:

これはレールでは可能ではありません。

私がこの問題に近づく方法は、アマゾンから必要な製品を取り出すためのアクションだけを持つ単純なsinatra-synchronyアプリを作成することです。

このアプリにajaxリクエストを送信できるようにするには、このアプリをあなたのドメイン(サブドメイン)に向ける必要があります。

現時点では他の解決方法はありません。もちろん、サーバー上で複数のアプリケーションプロセスを使用することはできますが、これで長期的には問題は解決しません。だから、アップラップする

:あなたが開発モードであなたのテストを行っているので、

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

ああ、これはやや残念です:( – Frexuz

2

私は、WEBrickにはRailsが切断デフォルトを使用して、このブロックを疑います。

私は、webrickは一度に1つのリクエストしか処理できないことを理解しています(これは本番用には推奨されていません)。

生産レベルのRailsは切断は、のPhusion旅客、または雑種/薄型サーバのクラスタのように、あなたの同時実行を取得します:)

関連する問題