我有以下代码。它是一个ActionMailer类方法,它发送包含两种附件的电子邮件:
pdf文件(_attachment),在内存中呈现并直接添加到消息中
可以从文件系统添加的其他一些文件(_attached_files)。
一切都很完美,除了一件事 - 它泄漏了记忆。只要用户发送带附件的消息,内存消耗就会不断增长和增长。它不会返回内存。 据我测试,我怀疑这个问题与文件系统中的附件有关,而不是渲染的PDF文件。
attachments[_attachment.pdf_filename] = render(_attachment.pdf_template_path, :format => :pdf)
_attached_files.try(:each) do |file|
attachments[file.attachment_file_name] = File.read(file.attachment.path, mode:"rb")
end
mail(:to =>_recipients, :from=>_sender_name, :subject => _subject)
答案 0 :(得分:1)
哦,最后我找到了内存泄漏的原因。 我错了 - 它与pdf文件有关。
我用prawn来渲染pdf文件。我包含了错误的外部字体系列并在表格中使用它们。每次大虾生成表时都会分配一些内存。
答案 1 :(得分:0)
我做了类似的事情,除了我做
attachments[file.attachment_file_name]
= File.open(file.attachment.path, "rb") {|f| f.read}
我不确定这是不是你的问题,但值得一试