Fix Cocaine::ExitStatusError when upload small non-animated GIF ()

Looks like copied tempfile need to be flushed before further processing. This issue won't happen if the uploaded file has enough file size.
This commit is contained in:
unarist 2017-10-26 22:48:35 +09:00 committed by GitHub
parent 02f7f3619a
commit 4f337c020a
3 changed files with 21 additions and 11 deletions

View file

@ -10,6 +10,7 @@ module Paperclip
unless options[:style] == :original && num_frames > 1 unless options[:style] == :original && num_frames > 1
tmp_file = Paperclip::TempfileFactory.new.generate(attachment.instance.file_file_name) tmp_file = Paperclip::TempfileFactory.new.generate(attachment.instance.file_file_name)
tmp_file << file.read tmp_file << file.read
tmp_file.flush
return tmp_file return tmp_file
end end

BIN
spec/fixtures/files/mini-static.gif vendored Normal file

Binary file not shown.

After

(image error) Size: 1.2 KiB

View file

@ -20,20 +20,29 @@ RSpec.describe MediaAttachment, type: :model do
end end
describe 'non-animated gif non-conversion' do describe 'non-animated gif non-conversion' do
let(:media) { MediaAttachment.create(account: Fabricate(:account), file: attachment_fixture('attachment.gif')) } fixtures = [
{ filename: 'attachment.gif', width: 600, height: 400, aspect: 1.5 },
{ filename: 'mini-static.gif', width: 32, height: 32, aspect: 1.0 },
]
it 'sets type to image' do fixtures.each do |fixture|
expect(media.type).to eq 'image' context fixture[:filename] do
end let(:media) { MediaAttachment.create(account: Fabricate(:account), file: attachment_fixture(fixture[:filename])) }
it 'leaves original file as-is' do it 'sets type to image' do
expect(media.file_content_type).to eq 'image/gif' expect(media.type).to eq 'image'
end end
it 'sets meta' do it 'leaves original file as-is' do
expect(media.file.meta["original"]["width"]).to eq 600 expect(media.file_content_type).to eq 'image/gif'
expect(media.file.meta["original"]["height"]).to eq 400 end
expect(media.file.meta["original"]["aspect"]).to eq 1.5
it 'sets meta' do
expect(media.file.meta["original"]["width"]).to eq fixture[:width]
expect(media.file.meta["original"]["height"]).to eq fixture[:height]
expect(media.file.meta["original"]["aspect"]).to eq fixture[:aspect]
end
end
end end
end end