如何确保在ruby中从内存中释放大文件(blob)?

时间:2017-01-06 12:17:14

标签: ruby-on-rails ruby garbage-collection

我有一个应用程序,它接收传入的文件(以blob_data形式的附件),然后将其传递给另一个外部服务/ API(同时在我的应用程序中存储附件元数据)。我不需要在我的应用中存储blob_data。

class Attachment < ActiveRecord::Base
  attr_accessor :blob_data
end

当我调用@attachment.save时,我认为blob_data不会被持久保存到DB,因为它是一个attr_accessor字段。但是,有没有办法确保这个blob_data立即从内存中释放出来?我不希望blob_data延迟到GC稍后捕获它,因为它可能占用相当多的内存,特别是如果服务器在同一时间段内收到多个请求。

是否就像使用@attachment.blob_data = nil一样简单?这会对GC的即时性有影响吗?还有更好的方法吗?

1 个答案:

答案 0 :(得分:2)

根据this帖子,您唯一能做的就是删除对blob_data的所有引用并等待垃圾收集开始。由于帖子和@ max的评论都提到了,效率更高解决问题的方法是流式传输文件而不将其存储在内存中。