Rails 3.2流媒体

Mat*_*ham 9 ruby streaming ruby-on-rails stream ruby-on-rails-3

我正在从Rails 3.2开始进行流式下载(CSV),并且遇到了初始页面请求需要很长时间的问题.以下控制器代码说明了我的问题:

      self.response_body = Enumerator.new do |y|
        10_000_000.times do
          y << "Hello World"
        end
      end 
Run Code Online (Sandbox Code Playgroud)

有了上面的内容,响应看起来就像它的流式传输(来自服务器而不是支持它......在我的情况下,Unicorn).也就是说,在它开始流式传输之前,它会比我想要的时间长得多.如果我将其更改为以下内容,则启动速度会更快:

      self.response_body = Enumerator.new do |y|
        1000.times do
          y << "Hello World"
        end
      end
Run Code Online (Sandbox Code Playgroud)

我的理解是响应应该从循环的第一次迭代开始,但似乎较大的循环导致初始加载时间延长.如果每次迭代都按原样输出,那么不管它有多少总迭代次数,都不应该花费相同的时间来启动流式处理过程.

感谢您的任何见解!

编辑:

这是我正在尝试的技术的解释.也许我误解或错过了一步?:http: //facebook.stackoverflow.com/questions/3507594/ruby-on-rails-3-streaming-data-through-rails-to-client/4320399#4320399

编辑:

认为 Rack-Cache可能会导致我的问题......我可以针对个别请求将其关闭吗?

编辑和解决:

我对Rack-Cache错了.我只需要添加self.response.headers['Last-Modified'] = Time.now.ctime.to_s我的回复.

mbk*_*ein 10

编辑过的问题结果恰好包含了我需要的答案.将其作为答案发布在此处.

让Rack处理程序正确流式传输的答案显然Last-Modified是在响应中添加一个标头:

self.response.headers['Last-Modified'] = Time.now.ctime.to_s
Run Code Online (Sandbox Code Playgroud)