我在 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 个图像调用时,它会落在它的脸上吗?
非常感谢任何帮助,这让我感到困惑和受阻。