记忆力不会释放

时间:2017-02-10 18:30:04

标签: ruby-on-rails ruby sendfile x-sendfile

我有一个创建应用程序备份的功能,并将其下载到一个zip文件中,数据库中包含数据,图像,文件等。为此我创建一个大的临时文件(使用Tempfile类)使用send_data发送到浏览器,但是当我在send_data之后删除它时,下载失败并且其内存未被释放。

send_file(zip_data.path, type: 'application/zip', filename: "#{model_name}.zip")

zip_data.unlink

服务类:http://pastebin.com/MskjP8d7

控制器方法:http://pastebin.com/CV9Wr27h

1 个答案:

答案 0 :(得分:0)

这是因为在执行unlink方法时,请求尚未完全提供,服务器实际上没有发送文件。 send_file实际上是由Web服务器处理的。

您可以放弃unlink来电。 Ruby garbage collector will clean up Tempfiles once they are out of scope。或者,将send_file替换为send_data,然后从控制器中手动发送Zip文件的二进制内容。