質問

PaperClip(2.3)を使用して、Ubuntuで実行されているRails 3.0.3アプリの画像アップロードを処理しています。 PaperClipは、宣伝されているようにアップロードを処理しますが、アプリケーション /TMPフォルダーで作成されたRackMultiPart*ファイルは永続的です。つまり、単に削除するのではなく蓄積します。 Tmpreaperを使用して古いTmpfilesを削除できることを理解していますが、もっとエレガントな(そしてスケーラブルな)ソリューションを見つけたいと思います。

Railsアプリのルートディレクトリ(IN /TMPの代わりに)に蓄積するTempファイル(つまり、rackMultipArt*ファイル)に関する以前の問題がありました。私は環境で一時的なパスを明示的に設定することでこれを解決しました。

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

Tempfilesが適切に処理されることを確認するために設定する必要がある別の環境変数がありますか?つまり、モデルに保存されたら削除されますか?これがPaperClipの問題なのか、私のレールのセットアップであるかはわかりません。

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

誠実な感謝。

PS-私は現在、ストレージにS3を使用しています。しかし、これは問題に結びついていないようです。ファイルをローカルに保存しているときに同じ問題がありました。

役に立ちましたか?

解決

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

tempfile = params[:file].tempfile.path
if File::exists?(tempfile)
  File::delete(tempfile)
end

他のヒント

tempfilereaper ラックミドルウェアは、この問題を処理すると考えられています。

http://www.rubydoc.info/github/rack/rack/rack/tempfilereaper

Application.RBにこの行を含めると、問題が解決します。

config.middleware.use Rack::TempfileReaper

更新:Rack-1.6.0.Beta2で問題を解決する必要があります。 Rails 4.2.0.rc2ですでに使用されていると思います。

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

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

Thread.new { GC.start }

これにより、使用されていないラックのごみ収集がトリガーされます::関連するTEMPファイルも削除するオブジェクトを要求します。 tempファイルをスイープしないことに注意してください 現在 要求しますが、以前のファイルを削除し、蓄積を防ぎます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top