From c84571d94a70d0515dfe5a18a826cde25d03218b Mon Sep 17 00:00:00 2001 From: Vasily Fedoseyev Date: Sat, 6 Apr 2024 00:06:18 +0300 Subject: [PATCH] More flush and rewind --- lib/paperclip/attachment.rb | 8 +++++++- lib/paperclip/recursive_thumbnail.rb | 2 +- lib/paperclip/storage/no_cache_s3.rb | 3 ++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/lib/paperclip/attachment.rb b/lib/paperclip/attachment.rb index 3366b7d..b66a1a5 100644 --- a/lib/paperclip/attachment.rb +++ b/lib/paperclip/attachment.rb @@ -317,11 +317,17 @@ module Paperclip new_original = Tempfile.new("paperclip-reprocess-#{instance.class.table_name}-#{instance.id}-") new_original.binmode old_original = to_file(:original) + # по идее копирование нужно не всегда new_original.write( old_original.read ) + new_original.flush new_original.rewind @queued_for_write = { :original => new_original } post_process - old_original.close if old_original.respond_to?(:close) + if old_original.respond_to?(:close!) + old_original.close! + elsif old_original.respond_to?(:close) + old_original.close + end save end diff --git a/lib/paperclip/recursive_thumbnail.rb b/lib/paperclip/recursive_thumbnail.rb index 40bc3f5..2e55cff 100644 --- a/lib/paperclip/recursive_thumbnail.rb +++ b/lib/paperclip/recursive_thumbnail.rb @@ -7,7 +7,7 @@ module Paperclip # генерим файл из оригинального source_style = options[:thumbnail] || :original # TODO: вообще queued_for_write[source_style] место в NoCacheS3#to_file - f = attachment&.queued_for_write&.dig(source_style)&.tap(&:rewind) + f = attachment&.queued_for_write&.dig(source_style)&.tap(&:flush)&.tap(&:rewind) # TODO: и надо сносить файл если все же была загрузка f ||= attachment.to_file(source_style) rescue file # rubocop:disable Style/RescueModifier super(f, options, attachment) diff --git a/lib/paperclip/storage/no_cache_s3.rb b/lib/paperclip/storage/no_cache_s3.rb index bffaa9a..20a71f4 100644 --- a/lib/paperclip/storage/no_cache_s3.rb +++ b/lib/paperclip/storage/no_cache_s3.rb @@ -143,7 +143,7 @@ module Paperclip end # HACK: Iostream пишет в tempfile, и он нигде не закрывается. Будем закрывать хотя бы тут queued_for_write.each_value do |file| - file.is_a?(Tempfile) && file.close! + file.respond_to?(:close!) && file.close! end queued_for_write.clear end @@ -233,6 +233,7 @@ module Paperclip }.merge(self.class.upload_options) files.each do |style, file| path = key(style) + file.flush file.rewind log "Saving to #{store_id}:#{path}" store.put_object(common_options.merge(key: path, body: file))