Память не освобождает

У меня есть функция, которая создает резервную копию приложения и загружает ее в zip-файл с данными в базах данных, изображениями, файлами и т. д. Для этого я создаю большой временный файл (используя класс Tempfile), который отправляет в браузер с send_data, но когда я удаляю его после send_data, загрузка не удалась, и его память не освобождается.

send_file(zip_data.path, type: 'application/zip', filename: "#{model_name}.zip")

zip_data.unlink

Класс обслуживания: http://pastebin.com/MskjP8d7

Метод контроллера: http://pastebin.com/CV9Wr27h


person Rodrigo AIS    schedule 10.02.2017    source источник


Ответы (1)


Это происходит потому, что к моменту выполнения метода unlink запрос еще не полностью обслужен и сервер еще не отправил файл. send_file фактически обрабатывается веб-сервером.

Вы можете либо отказаться от вызова unlink. мусор Ruby сборщик очистит временные файлы, как только они выйдут за рамки. Или замените send_file на send_data и вручную отправьте двоичное содержимое вашего Zip-файла из контроллера.

person danirod    schedule 10.02.2017