Frage

Ich verwende Paperclip (2.3), um Bild -Uploads auf einer Rails 3.0.3 -App zu verarbeiten, die auf Ubuntu ausgeführt wird. Paperclip behandelt die Uploads wie angekündigt, aber die Rackmultipart* -Dateien, die im Ordner der Anwendung /TMP erstellt werden - dh sie sammeln sich einfach an, anstatt sich selbst zu löschen. Mir ist klar, dass ich mit TMPraper alte TMPFiles löschen kann, aber ich würde wirklich gerne eine elegantere (und skalierbare) Lösung finden.

Ich hatte ein früheres Problem mit TEMP -Dateien (dh RackMultipart* -Dateien), die sich im Stammverzeichnis der Rails -App (anstelle von in /tmp) ansammeln. Ich habe dies gelöst, indem ich explizit den temporären Pfad in meiner Umgebung festgelegt habe. RB -Datei wie SO:

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

Gibt es eine andere Umgebungsvariable, die festgelegt werden muss, um sicherzustellen, dass die Tempfiles ordnungsgemäß behandelt werden - dh gelöscht, wenn sie im Modell gespeichert wurden? Ich bin mir nicht sicher, ob dies ein Problem mit Paperclip oder meinem Rails -Setup ist.

Ich habe hoch und niedrig gesucht, habe aber wenig Fortschritte gemacht. Ich wäre dankbar für alle Leads.

Aufrichtig danke.

PS - Ich verwende derzeit S3 für die Speicherung. Dies scheint jedoch nicht an das Problem gebunden zu sein - ich hatte das gleiche Problem, als ich die Dateien lokal gespeichert habe.

War es hilfreich?

Lösung

Ich weiß nicht, ob dies noch elegant ist, aber das mache ich nach dem Speichern der Datei. "

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

Andere Tipps

Das Tempfilereafer Ist das Rack Middleware gedacht, um dieses Problem zu behandeln?

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

Einschließlich dieser Zeile in der Anwendung.RB löst das Problem:

config.middleware.use Rack::TempfileReaper

UPDATE: Das Problem sollte in Rack-1.6.0.beta2 behoben werden. Ich sehe, dass es bereits in Rails 4.2.0.RC2 verwendet wird.

Unterhalb der Problemumgehung hat mir fast ein Jahr lang gut geführt:

Ich habe dies am Ende der Controller -Aktion hinzugefügt, die Datei -Uploads akzeptiert:

Thread.new { GC.start }

Dies löst die Müllsammlung von nicht verwendeten Rack :: Anforderungsobjekten aus, die auch zugehörige Temp -Dateien löschen. Beachten aktuell Anfrage, aber es wird frühere Dateien entfernt und verhindert, dass sie sich ansammeln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top