12

Paperclip (2.3) を使用して、Ubuntu で実行されている Rails 3.0.3 アプリで画像のアップロードを処理しています。Paperclip は宣伝どおりにアップロードを処理していますが、アプリケーションの /tmp フォルダーに作成された RackMultipart* ファイルは保持されます。つまり、ファイル自体が削除されるのではなく、単に蓄積されます。tmpreaper を使用して古い tmpfiles を削除できることはわかっていますが、よりエレガントな (そしてスケーラブルな) ソリューションを見つけたいと思っています。

一時ファイル (RackMultipart* ファイルなど) が (/tmp ではなく) Rails アプリのルート ディレクトリに蓄積されるという以前の問題がありました。次のように、environment.rb ファイルに一時パスを明示的に設定することで、これを解決しました。

ENV['TMPDIR'] = Rails.root.join('tmp')

一時ファイルが適切に処理されるように設定する必要がある別の環境変数はありますか?つまり、モデルに保存されたら削除されますか? これが Paperclip の問題なのか、Rails のセットアップの問題なのかはわかりません。

私は高低を検索しましたが、これについてはほとんど進歩していません。どんなリードにも感謝します。

心から感謝します。

PS - 現在、ストレージに S3 を使用しています。ただし、これは問題に関連していないようです-ファイルをローカルに保存していたときに同じ問題が発生しました。

4

3 に答える 3

5

これがもうエレガントかどうかはわかりませんが、ファイルを保存した後に私が行っていることです」

tempfile = params[:file].tempfile.path
if File::exists?(tempfile)
  File::delete(tempfile)
end
于 2011-03-11T20:20:43.260 に答える
0

更新: 問題は rack-1.6.0.beta2 で解決されるはずです。Rails 4.2.0.rc2 ではすでに使用されているようです。

以下の回避策は、ほぼ1年間私に役立ちました:

ファイルのアップロードを受け入れるコントローラー アクションの最後にこれを追加しました。

Thread.new { GC.start }

これにより、未使用の Rack::Request オブジェクトのガベージ コレクションがトリガーされ、関連する一時ファイルも削除されます。現在のリクエストの一時ファイルを一掃しないことに注意してください。ただし、以前のファイルを削除し、それらが蓄積されないようにします。

于 2014-01-07T14:21:12.123 に答える