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

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
tmp_file = Paperclip::TempfileFactory.new.generate(attachment.instance.file_file_name)
tmp_file << file.read
tmp_file.flush
return tmp_file
end

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -20,20 +20,29 @@ RSpec.describe MediaAttachment, type: :model do
end
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
expect(media.type).to eq 'image'
end
fixtures.each do |fixture|
context fixture[:filename] do
let(:media) { MediaAttachment.create(account: Fabricate(:account), file: attachment_fixture(fixture[:filename])) }
it 'leaves original file as-is' do
expect(media.file_content_type).to eq 'image/gif'
end
it 'sets type to image' do
expect(media.type).to eq 'image'
end
it 'sets meta' do
expect(media.file.meta["original"]["width"]).to eq 600
expect(media.file.meta["original"]["height"]).to eq 400
expect(media.file.meta["original"]["aspect"]).to eq 1.5
it 'leaves original file as-is' do
expect(media.file_content_type).to eq 'image/gif'
end
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