3

我有以下代码。它是一个 ActionMailer 类方法,它发送包含两种附件的电子邮件:

  1. pdf 文件(_attachment),在内存中呈现并直接添加到消息中

  2. 可以从文件系统添加的其他一些文件(_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)
4

2 回答 2

1

哦,终于找到内存泄漏的原因了。我错了 - 它与 pdf 文件有关。

我使用虾来渲染 pdf 文件。我错误地包含了外部字体系列并在表格中使用了它们。每次大虾生成表时,都会分配一些内存。

于 2012-11-30T15:56:58.813 回答
0

我做类似的事情,除了我做

  attachments[file.attachment_file_name] 
     = File.open(file.attachment.path, "rb") {|f| f.read}

我不确定这是否是您的问题,但值得一试

于 2012-10-18T16:18:59.910 回答