Вопрос

Я использую PaperClip (2.3) для обработки загрузки изображений на приложении Rails 3.0.3, работающем на Ubuntu. PaperClip обрабатывает загрузки, как рекламируется, но файлы Rackmultipart*, созданные в папке приложения /TMP, сохраняются, то есть они просто накапливаются, а не удаляют себя. Я понимаю, что мог бы использовать TMPREAPER для удаления старых TMPFILES, но я бы очень хотел найти более элегантное (и масштабируемое) решение.

У меня была предыдущая проблема с временными файлами (т.е. файлы Rackmultipart*), накапливающиеся в корневом каталоге приложения Rails (вместо /TMP). Я решил это, явно установив путь температуры в моей среде.

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

Есть ли другая переменная среды, которую необходимо установить, чтобы убедиться, что Tempfiles обрабатываются должным образом - т.е. удаляется после их сохранения в модели? Я не уверен, является ли это проблемой с настройкой скрепки или настройки рельсов.

Я искал высокий и низкий, но добился мало прогресса в этом. Я был бы благодарен за любые лидеры.

Искреннее спасибо.

PS - я использую в настоящее время использую S3 для хранения. Похоже, что это не связано с проблемой - у меня была та же проблема, когда я хранил файлы локально.

Это было полезно?

Решение

Я не знаю, элегантно ли это, но это то, что я делаю после сохранения файла »

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

Другие советы

А TempfileReaper Считается ли промежуточное программное обеспечение для решения этой проблемы.

http://www.rubydoc.info/github/rack/rack/rack/tempfilereaper

Включая эту строку в приложении.rb решает проблему:

config.middleware.use Rack::TempfileReaper

ОБНОВЛЕНИЕ: Проблема должна быть решена в RACK-1.6.0.BETA2. Я вижу, что он уже используется в Rails 4.2.0.rc2.

Ниже обходной путь хорошо служил мне в течение почти года:

Я добавил это в конце действия контроллера, которое принимает загрузки файлов:

Thread.new { GC.start }

Это запускает сборку мусора неиспользуемых объектов Rack :: запроса, которые также удаляют связанные временные файлы. Обратите внимание, что он не поднимает временный файл Текущий Запрос, но он удаляет предыдущие файлы и не позволяет им накапливаться.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top