Pregunta

Estoy usando Paperclip (2.3) para manejar archivos de imagen de un Rails 3.0.3 aplicación corriendo en Ubuntu. Paperclip es el manejo de los archivos como se anuncia pero el RackMultipart * archivos que se crean en la aplicación es / tmp carpeta persisten - es decir, que simplemente se acumulan en lugar de eliminar a sí mismos. Me di cuenta que podía usar tmpreaper eliminar TMPFILES viejos pero me gusta mucho para encontrar una solución más elegante (y escalable).

Yo tenía un número anterior de archivos temporales (es decir RackMultipart * archivos) que se acumula en el directorio raíz de la aplicación Rails (en lugar de en / tmp). Resolví esto estableciendo explícitamente la ruta temporal en mi archivo environment.rb este modo:

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

¿Hay otra variable de entorno que debe establecerse para asegurarse de que los TEMPFILES se manejan correctamente - es decir, elimina una vez que han sido salvados en el modelo? No estoy seguro si esto es un problema con clips o mi configuración de los carriles.

he buscado alta y baja, pero se han hecho pocos progresos en este sentido. Estaría agradecido por cualquier pista.

Un agradecimiento sincero.

PS - Estoy usando actualmente usando S3 para el almacenamiento. Esto no parece estar ligado al problema, sin embargo -. Yo tenía el mismo problema cuando estaba almacenando los archivos localmente

¿Fue útil?

Solución

No sé si esto es más elegante, pero esto es lo que estoy haciendo después de que el archivo se guarda "

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

Otros consejos

La TempFileReaper es la Rack middleware pensado para manejar este problema.

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

La inclusión de esta línea en los resuelve el problema application.rb:

config.middleware.use Rack::TempfileReaper

ACTUALIZACIÓN: El problema debe resolverse en rack 1.6.0.beta2. Veo que ya está siendo utilizado en los carriles 4.2.0.rc2.

A continuación solución me sirvió bien durante casi un año:

He añadido esto al final de la acción del controlador que acepta la carga de archivos:

Thread.new { GC.start }

Esta colección desencadenantes de basura no utilizados rack :: Solicitud de objetos que también elimina los archivos temporales asociados. Tenga en cuenta que no barre archivo temporal de actuales solicitud, pero no elimina los archivos anteriores, e impide que se acumulen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top