Domanda

Sto usando Paperclip (2.3) per gestire il caricamento di immagini su un Rails 3.0.3 applicazione in esecuzione su Ubuntu. Paperclip sta gestendo gli arrivi come pubblicizzato ma i file RackMultipart * che vengono creati nell'applicazione è / tmp cartella di persistenza - che è, semplicemente si accumulano piuttosto che l'eliminazione di se stessi. Mi rendo conto che avrei potuto usare tmpreaper per eliminare i vecchi TMPFILES ma mi piacerebbe molto trovare una soluzione più elegante (e scalabile).

Ho avuto un problema con il precedente file temporanei (cioè RackMultipart * file) che si deposita nella directory principale dell'applicazione Rails (invece che in / tmp). Ho risolto questo impostando in modo esplicito il percorso temporaneo nel mio file environment.rb in questo modo:

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

C'è un altro variabile d'ambiente che deve essere impostato per fare in modo che i file temporanei vengono gestiti correttamente - cioè eliminati dopo che sono stati salvati nel modello? Non sono sicuro se questo è un problema con la graffetta o la mia configurazione Rails.

Ho cercato di alta e bassa, ma hanno fatto pochi progressi su questo. Sarei grato per qualsiasi porta.

Un grazie sincero.

PS - sto usando attualmente in uso S3 per la conservazione. Questo non sembra essere legato al problema però -. Ho avuto lo stesso problema quando ero la memorizzazione dei file in locale

È stato utile?

Soluzione

I don't know if this is anymore elegant but this is what I am doing after the file is saved"

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

Altri suggerimenti

The TempFileReaper is the Rack middleware thought to handle this issue.

http://www.rubydoc.info/github/rack/rack/Rack/TempfileReaper

Including this line in the application.rb solves the problem:

config.middleware.use Rack::TempfileReaper

UPDATE: Problem should be resolved in rack-1.6.0.beta2. I see it's already being used in Rails 4.2.0.rc2.

Below workaround served me well for almost a year:

I've added this at the end of controller action that accepts file uploads:

Thread.new { GC.start }

This triggers Garbage Collection of unused Rack::Request objects which also deletes associated temp files. Note it doesn't sweep temp file of current request, but it does remove previous files, and prevents them from accumulating.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top