with tutorial subir rails example archivos file-upload garbage-collection ruby-on-rails-3 paperclip tmp

file upload - tutorial - ¿Por qué persisten los archivos RackMultipart*en mi directorio Rails/tmp?



upload file rails (3)

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

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

Estoy usando Paperclip (2.3) para manejar cargas de imágenes en una aplicación Rails 3.0.3 que se ejecuta en Ubuntu. Paperclip está manejando las cargas tal como se anuncia PERO los archivos RackMultipart * que se crean en la carpeta / tmp de la aplicación persisten, es decir, simplemente se acumulan en lugar de eliminarse. Me doy cuenta de que podría usar tmpreaper para eliminar viejos archivos tmp, pero realmente me gustaría encontrar una solución más elegante (y escalable).

Tengo un problema anterior con los archivos temporales (es decir, archivos RackMultipart *) que se acumulan en el directorio raíz de la aplicación Rails (en lugar de en / tmp). Resolví esto estableciendo explícitamente la ruta de acceso temporal en mi archivo environment.rb como sigue:

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

¿Hay alguna otra variable de entorno que deba establecerse para garantizar que los archivos temporales se manejen correctamente, es decir, que se eliminen una vez que se hayan guardado en el modelo? No estoy seguro de si esto es un problema con Paperclip o la configuración de mi Rails.

He buscado alto y bajo pero he progresado poco en esto. Estaría agradecido por cualquier pista.

Sincero gracias.

PD: estoy usando actualmente el uso de S3 para el almacenamiento. Sin embargo, esto no parece estar relacionado con el problema: tuve el mismo problema cuando almacenaba los archivos localmente.


ACTUALIZACIÓN: el problema debe resolverse en rack-1.6.0.beta2. Veo que ya se está utilizando en Rails 4.2.0.rc2.

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

He agregado esto al final de la acción del controlador que acepta cargas de archivos:

Thread.new { GC.start }

Esto activa la recolección de elementos no utilizados Rack :: Request, que también elimina los archivos temporales asociados. Tenga en cuenta que no barre el archivo temporal de la solicitud actual , pero elimina los archivos anteriores y evita que se acumulen.