ActionMailer中的内存泄漏

时间:2012-10-18 16:06:46

标签: ruby-on-rails memory memory-leaks

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

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

  2. 可以从文件系统添加的其他一些文件(_attached_files)。

  3. 一切都很完美,除了一件事 - 它泄漏了记忆。只要用户发送带附件的消息,内存消耗就会不断增长和增长。它不会返回内存。 据我测试,我怀疑这个问题与文件系统中的附件有关,而不是渲染的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)
    

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

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

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