Feature #37530 » 37530-v4.patch
| config/configuration.yml.example | ||
|---|---|---|
| 178 | 178 |
# the `gs` binary. Used to generate attachment thumbnails of PDF files. |
| 179 | 179 |
#gs_command: |
| 180 | 180 | |
| 181 |
# Timeout when generating thumbnails using the `convert` or `gs` command. |
|
| 182 |
# Timeout is set in seconds. |
|
| 183 |
#thumbnails_generation_timeout: 10 |
|
| 184 | ||
| 181 | 185 |
# Configuration of MiniMagick font. |
| 182 | 186 |
# |
| 183 | 187 |
# Redmine uses MiniMagick in order to export a gantt chart to a PNG image. |
| lib/redmine/configuration.rb | ||
|---|---|---|
| 27 | 27 |
'avatar_server_url' => 'https://www.gravatar.com', |
| 28 | 28 |
'email_delivery' => nil, |
| 29 | 29 |
'max_concurrent_ajax_uploads' => 2, |
| 30 |
'common_mark_enable_hardbreaks' => true |
|
| 30 |
'common_mark_enable_hardbreaks' => true, |
|
| 31 |
'thumbnails_generation_timeout' => 10 |
|
| 31 | 32 |
} |
| 32 | 33 | |
| 33 | 34 |
@config = nil |
| lib/redmine/thumbnail.rb | ||
|---|---|---|
| 18 | 18 |
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
| 19 | 19 | |
| 20 | 20 |
require 'fileutils' |
| 21 |
require 'timeout' |
|
| 21 | 22 | |
| 22 | 23 |
module Redmine |
| 23 | 24 |
module Thumbnail |
| ... | ... | |
| 51 | 52 |
else |
| 52 | 53 |
cmd = "#{shell_quote CONVERT_BIN} #{shell_quote source} -auto-orient -thumbnail #{shell_quote size_option} #{shell_quote target}"
|
| 53 | 54 |
end |
| 54 |
unless system(cmd) |
|
| 55 |
logger.error("Creating thumbnail failed (#{$?}):\nCommand: #{cmd}")
|
|
| 55 | ||
| 56 |
pid = nil |
|
| 57 |
begin |
|
| 58 |
Timeout.timeout(Redmine::Configuration['thumbnails_generation_timeout'].to_i) do |
|
| 59 |
pid = Process.spawn(cmd) |
|
| 60 |
_, status = Process.wait2(pid) |
|
| 61 |
unless status.success? |
|
| 62 |
logger.error("Creating thumbnail failed (#{status.exitstatus}):\nCommand: #{cmd}")
|
|
| 63 |
return nil |
|
| 64 |
end |
|
| 65 |
end |
|
| 66 |
rescue Timeout::Error |
|
| 67 |
Process.kill('KILL', pid)
|
|
| 68 |
logger.error("Creating thumbnail timed out:\nCommand: #{cmd}")
|
|
| 56 | 69 |
return nil |
| 57 | 70 |
end |
| 58 | 71 |
end |
| test/unit/attachment_test.rb | ||
|---|---|---|
| 626 | 626 |
ensure |
| 627 | 627 |
set_tmp_attachments_directory |
| 628 | 628 |
end |
| 629 | ||
| 630 |
def test_thumbnail_should_timeout |
|
| 631 |
dummy_pid = 37530 |
|
| 632 |
Process.stubs(:spawn).returns(dummy_pid) |
|
| 633 |
Process.stubs(:wait2).raises(Timeout::Error) |
|
| 634 |
Process.stubs(:kill).returns(1) |
|
| 635 |
Process.stubs(:wait).returns(dummy_pid) |
|
| 636 |
Rails.logger.expects(:error).with(regexp_matches(/Creating thumbnail timed out/)) |
|
| 637 | ||
| 638 |
set_fixtures_attachments_directory |
|
| 639 |
Attachment.clear_thumbnails |
|
| 640 | ||
| 641 |
attachment = Attachment.find(16) |
|
| 642 |
thumbnail = attachment.thumbnail |
|
| 643 | ||
| 644 |
assert_nil thumbnail |
|
| 645 |
ensure |
|
| 646 |
set_tmp_attachments_directory |
|
| 647 |
end |
|
| 629 | 648 |
else |
| 630 | 649 |
puts '(ImageMagick convert not available)' |
| 631 | 650 |
end |
- « Previous
- 1
- …
- 3
- 4
- 5
- Next »