Ruby on rails 如何使用Heroku上的send_file(或send_data)解决内存泄漏?

Ruby on rails 如何使用Heroku上的send_file(或send_data)解决内存泄漏?,ruby-on-rails,heroku,mongrel,sendfile,x-sendfile,Ruby On Rails,Heroku,Mongrel,Sendfile,X Sendfile,我有一个Rails 3应用程序,需要生成图像并将数据发送到浏览器 应用程序必须部署在Heroku上 然而,Heroku只支持通过Mongrel进行流式传输,而Mongrel保留了内存。这会导致Heroku变慢,然后在十几个请求后终止线程 我目前正在使用ActionController::DataStreaming中的send_数据或send_文件 Heroku不支持Rack::Sendfile或x-Sendfile “ruby-mongrel-x-sendfile”项目说:“通过mongr

我有一个Rails 3应用程序,需要生成图像并将数据发送到浏览器

应用程序必须部署在Heroku上

然而,Heroku只支持通过Mongrel进行流式传输,而Mongrel保留了内存。这会导致Heroku变慢,然后在十几个请求后终止线程

我目前正在使用ActionController::DataStreaming中的send_数据或send_文件

Heroku不支持Rack::Sendfile或x-Sendfile

“ruby-mongrel-x-sendfile”项目说:“通过mongrel流式传输大量数据是一件坏事;导致严重的内存泄漏”,并提供了“in-mongrel解决方案”。但这看起来不是一个好的解决方案

一个缓慢的解决方案是首先将每个文件上传到AmazonS3


有人有什么想法吗?

答案是从以下几点开始垃圾收集:

GC.start
在发送数据之后,我将该行放在Rails控制器操作的底部

答案是绝对不要开始垃圾收集。这掩盖了执行不力的问题。严格来说,Ruby进程仍将消耗更多的内存

答案是流式传输响应数据,即逐块将数据读取到内存中,并通过响应体刷新数据。这样,为您发送的文件/数据提供服务所需的最大内存限制为正在传输的“页面”的大小

签出并将二进制数据分块读取给请求这些图像的客户端