我有一个创建应用程序备份的功能,并将其下载到一个zip文件中,数据库中包含数据,图像,文件等。为此我创建一个大的临时文件(使用Tempfile类)使用send_data发送到浏览器,但是当我在send_data之后删除它时,下载失败并且其内存未被释放。
send_file(zip_data.path, type: 'application/zip', filename: "#{model_name}.zip")
zip_data.unlink
答案 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文件的二进制内容。