Mam prostą aplikację sinatra, która musi wygenerować plik (przez zewnętrzny proces), wysłać ten plik do przeglądarki, a na koniec usunąć plik z systemu plików. Coś wzdłuż tych linii:Jak mogę usunąć plik w Sinatrze po wysłaniu przez 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
Wydaje się jednak, że połączenie send_file
uzupełnia wniosek, a każdy kod po niej nie dostaje bieg.
Czy istnieje sposób, aby upewnić się, że wygenerowany plik jest czyszczony po jego pomyślnym wysłaniu do przeglądarki? Czy będę musiał odwołać się do zadania cron uruchamiającego skrypt czyszczenia w pewnym przedziale?
Czy nie użyłoby to więcej pamięci? – James
-1, co, jeśli plik ma 4 GB długości? – yeyo
@Kira, wysyłając plik 4GB do przeglądarki? Taki przypadek powinien zostać uniemożliwiony w metodzie 'generate_the_file()'. Moja sugestia dotyczyła zmiany kolejności działań, tak aby wygenerowany plik został usunięty, zanim przeglądarka otrzyma plik ... oryginalne pytanie. –