3

次のコードがあります。これは、2 種類の添付ファイルを含む電子メールを送信する ActionMailer クラス メソッドです。

  1. メモリにレンダリングされ、メッセージに直接追加された pdf ファイル (_attachment)

  2. ファイル システムから追加できるその他のファイル (_attached_files)。

すべてが完全に機能しますが、1 つのことを除いて、メモリ リークが発生します。ユーザーが添付ファイル付きのメッセージを送信している限り、メモリの消費量は増え続けます。メモリは戻りません。私がテストした限りでは、この問題はレンダリングされた 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 に答える