How can I delete a file in Sinatra after it has been sent via send_file?

Posted by John Reilly on Stack Overflow See other posts from Stack Overflow or by John Reilly
Published on 2010-05-10T20:05:07Z Indexed on 2010/05/25 20:51 UTC
Read the original article Hit count: 160

Filed under:
|

I have a simple sinatra application that needs to generate a file (via an external process), send that file to the browser, and finally, delete the file from the filesystem. Something along these lines:

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

It seems, however, that the send_file call completes the request, and any code after it does not get run.

Is there some way to ensure that the generated file is cleaned up after it has been successfully sent to the browser? Or will I need to resort to a cron job running a cleanup script on some interval?

© Stack Overflow or respective owner

Related posts about ruby

Related posts about sinatra