相关疑难解决方法(0)

Ruby on Rails 3:通过Rails将数据流式传输到客户端

我正在开发一个与RackSpace cloudfiles通信的Ruby on Rails应用程序(类似于Amazon S3但缺少某些功能).

由于缺乏每对象访问权限和查询字符串身份验证的可用性,因此必须通过应用程序调解用户下载.

在Rails 2.3中,看起来您可以动态构建响应,如下所示:

# Streams about 180 MB of generated data to the browser.
render :text => proc { |response, output|
  10_000_000.times do |i|
    output.write("This is line #{i}\n")
  end
}
Run Code Online (Sandbox Code Playgroud)

(来自http://api.rubyonrails.org/classes/ActionController/Base.html#M000464)

而不是10_000_000.times...我可以在那里转储我的cloudfiles流生成代码.

麻烦的是,这是我在Rails 3中尝试使用这种技术时得到的输出.

#<Proc:0x000000010989a6e8@/Users/jderiksen/lt/lt-uber/site/app/controllers/prospect_uploads_controller.rb:75>
Run Code Online (Sandbox Code Playgroud)

看起来可能call没有调用proc对象的方法?还有其他想法吗?

streaming ruby-on-rails cloudfiles ruby-on-rails-3

44
推荐指数
5
解决办法
2万
查看次数

通过Apache提供动态zip文件

我的Rails应用程序的职责之一是创建和提供签名的xmls.任何签名的xml一旦创建,就永远不会改变.所以我将每个xml存储在public文件夹中并适当地重定向客户端以避免从控制器进行不必要的处理.

现在我想要一个新功能:每个xml都与一个日期相关联,我想实现提供包含每个xml的压缩文件的能力,该xml的日期位于客户端指定的时间段内.尽管如此,该功能有用的时间不能限制在一个月以内,这意味着一些服务的zip文件将大到50M.

我的应用程序部署为Apache的Passenger模块.因此,服务文件是完全不可接受的send_data,因为客户端必须等待在实际下载开始之前生成整个压缩文件.虽然我对如何在Rails中实现该功能有了一个想法,所以压缩文件是在服务时生成的,但我觉得一旦分配了一些冗长的Ruby/Passenger进程来提供大型zip文件,我的服务器就会缺乏资源.

我读过有关通过Apache提供静态文件的更好解决方案,但不是动态的.

那么,问题的解决方案是什么?我需要类似自定义Apache处理程序的东西吗?如何从我的应用程序通知Apache如何处理请求,压缩文件和同时流式传输结果?

apache streaming zip

8
推荐指数
1
解决办法
1969
查看次数