Tengo una aplicación sinatra simple que necesita para generar un archivo (a través de un proceso externo), enviar ese archivo al navegador y, finalmente, eliminar el archivo del sistema de archivos. Algo a lo largo de estas líneas:¿Cómo puedo eliminar un archivo en Sinatra después de haberlo enviado a través de send_file?
class MyApp < Sinatra::Base
get '/generate-file' do
# calls out to an external process,
# and returns the path to the generated file
file_path = generate_the_file()
# send the file to the browser
send_file(file_path)
# remove the generated file, so we don't
# completely fill up the filesystem.
File.delete(file_path)
# File.delete is never called.
end
end
Parece, sin embargo, que la llamada send_file
completa la solicitud, y cualquier código después de que no recibe plazo.
¿Hay alguna forma de garantizar que el archivo generado se limpia después de que se haya enviado correctamente al navegador? ¿O tendré que recurrir a un trabajo cron que ejecute un script de limpieza en algún intervalo?
¿No utilizaría esto más memoria? – James
-1, ¿y si el archivo tiene 4GB de largo? – yeyo
@Kira, ¿cómo enviar un archivo de 4GB a un navegador? Tal caso debería evitarse en el método 'generate_the_file()'. Mi sugerencia fue cambiar el orden de las acciones, de modo que el archivo generado se elimine antes de que el navegador reciba el archivo ... la pregunta original. –