Project

General

Profile

Patch #41919 » 0002-Calling-MiniMagick-every-time-is-slow-so-I-m-going-t.patch

Kota Shiratsuka, 2024-12-02 15:05

View differences:

app/helpers/application_helper.rb
1007 1007
          title_and_alt = other_attrs.scan(title_and_alt_re).to_h
1008 1008
          other_attrs.gsub!(title_and_alt_re, '')
1009 1009

  
1010
          # Process dimensions and scaling
1011
          width, height = nil, nil
1012
          image = MiniMagick::Image.open(found.diskfile)
1013
          width, height = image.width, image.height
1014

  
1015
          # Adjust dimensions for @2x, @3x, etc.
1016
          if filename =~ /@(\d+)x\./
1017
            scale_factor = $1.to_i
1018
            width /= scale_factor
1019
            height /= scale_factor
1020
          end
1010
          # Get cache store configuration
1011
          config = Rails.application.config.redmine_image_cache_store rescue :memory_store
1012
          cache_store = ActiveSupport::Cache.lookup_store(config)
1013

  
1014
          # Use digest from the database as cache key
1015
          cache_key = "image_dimensions:#{found.digest}"
1016

  
1017
          # Cache dimensions and retrieve from Redis or memory store
1018
          dimensions = cache_store.fetch(cache_key) do
1019
            # Process dimensions and scaling
1020
            image = MiniMagick::Image.open(found.diskfile)
1021
            width, height = image.width, image.height
1022

  
1023
            # Adjust dimensions for @2x, @3x, etc.
1024
            if filename =~ /@(\d+)x\./
1025
              scale_factor = $1.to_i
1026
              width /= scale_factor
1027
              height /= scale_factor
1028
            end
1021 1029

  
1022
          # Resize if width exceeds 1000px while maintaining aspect ratio
1023
          if width > 1000
1024
            scale = 800.0 / width
1025
            width = 800
1026
            height = (height * scale).round
1030
            # Resize if width exceeds 1000px while maintaining aspect ratio
1031
            if width > 1000
1032
              scale = 800.0 / width
1033
              width = 800
1034
              height = (height * scale).round
1035
            end
1036

  
1037
            { width: width, height: height }
1027 1038
          end
1028 1039

  
1040
          width = dimensions[:width]
1041
          height = dimensions[:height]
1042

  
1029 1043
          # Add width and height to the img tag only if style attribute is absent
1030 1044
          dimension_attrs = (!has_style && width && height) ? " width=\"#{width}\" height=\"#{height}\"" : ""
1031 1045

  
config/environments/production.rb
42 42
  # Use a different cache store in production.
43 43
  # config.cache_store = :mem_cache_store
44 44

  
45
  # Using Redis Store
46
  config.redmine_image_cache_store = :redis_cache_store, { path: '/var/run/valkey/valkey.sock' }
47

  
45 48
  # Send deprecation notices to registered listeners.
46 49
  config.active_support.deprecation = :log
47 50

  
(5-5/5)