Rails 3使用x_sendfile流式传输多个图像会在Tomcat下挂起

时间:2012-11-26 13:15:10

标签: ruby-on-rails-3 image tomcat jruby warbler

我在rails 3.x上的JRuby上有一个小应用程序需要返回存储在公共文件夹外的文件系统中的用户图像。我认为使用单独的控制器来响应这些请求将是检索它们的最佳方式。它适用于2或3张图像,但在显示超过6或7张图像的页面上,它会返回5张左右,然后停止运行。其余的图像永远不会出现。我在某处读到它可能没有正确地关闭响应,但说实话,我不知道这意味着什么或如何解决它。应用程序在webrick下运行正常,但是当作为WAR文件(由warbler创建)部署到Tomcat时,它表现出这种行为。这就像Tomcat无法处理所有同时请求。在返回前几张图像后,浏览器将旋转几秒钟等待更多图像,然后放弃。如果我点击“页面停止加载”按钮,我发现我无法导航到另一个页面,就像Tomcat仍然被绑定一样。

在routes.rb中我有:

match '/serve_image/:account/:user/:file' => 'images#serve'

我的图像控制器代码非常简单:

class ImagesController < ApplicationController
  def serve

path = "#{Rails.application.config.cir}/#{params[:account]}/#{params[:user]}/#{params[:file]}"

send_file( path,
  :disposition => 'inline',
  :type => 'image/jpeg',
  :x_sendfile => true )
end
end

在erb文件中,它被调用:

         <img class="porto_image" alt="image" 
             src="<%=porto_image.image_filename.html_safe%>"
        />

porto_image相关代码:

def image_filename
 ret = "#{Rails.application.config.cir_web_prefix}serve_image/#{account}/#{user}/#{self.image_file}"
 ret
end

那么,任何想法为什么这只适用于几张图片,但当我从同一页面向它投出10-20张图像时,它会落在脸上?

任何帮助都非常感激,这个让我感到难过。阻止。

0 个答案:

没有答案