Fre*_*xuz 5 ruby-on-rails http
我想显示一些通过Ajax加载的亚马逊产品.
我用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
Run Code Online (Sandbox Code Playgroud)
我已经注意到这个Action阻止了服务器.我已尝试在另一个标签页中打开该网站.在具有Ajax调用的第一个选项卡完成之前,该选项卡不会开始加载.
我怎样才能解决这个问题?
建立:
Ubuntu 10.10
Rails 3.1.1
Ruby 1.9.2
Gem:https://github.com/hakanensari/amazon_product
编辑:
只是澄清一下,这取决于您在开发环境中使用的服务器,而不是 Rails。
WebRick(开发中默认的http服务器)一次只能处理一个请求。当您部署应用程序时,您应该使用 puma、unicorn、Phusion Passenger 或具有多个进程(或线程)处理您的请求的任何其他服务器。
旧答案:
我认为这在 Rails 中是不可能的。
我解决这个问题的方法是创建一个简单的sinatra 同步应用程序,该应用程序仅具有用于从亚马逊获取您想要的产品的操作。
为了能够向此应用程序发送ajax请求,您需要将此应用程序指向您的域(子域)。
目前我没有看到任何其他解决方案。当然,您的服务器上可以有多个应用程序进程,但这并不能长期解决您的问题。
总结一下:
AJAX -> amazon-producs-sinatra-app.yourdomain.com
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1185 次 |
| 最近记录: |