Skip to content

Commit

Permalink
Fixes using ActiveStorage adapter with libvips as variant processor
Browse files Browse the repository at this point in the history
[Rails 6.0
introduced](https://github.com/rails/rails/blob/6-0-stable/activestorage/CHANGELOG.md#rails-600beta1-january-18-2019)
the option of using libvips as an alternative to imagemagick as a
backend image processor.

Both processors are handled using the
[image_processing](https://github.com/janko/image_processing) library as
adapter. However, the API for both is not fully compatible. What
it's important for us when generating a variant, the `strip` option
needs to be within the `saver` group to work with both adapters. See
https://gist.github.com/brenogazzola/a4369965a1da426d50f11d080fe2e563#1-move-everything-that-has-to-do-with-compression-to-a-saver-hash
for details. We also need to explicitly coerce size values to integers
for libvips.

We're also adding libvips to the development docker image and allowing to
run tests with that adapter by setting the
`ACTIVE_STORAGE_VARIANT_PROCESSOR` env variable. However, we still
default it to `:mime_magick` (Ruby's wrapper for imagemagick), Rail's
default previous to 7.0. We'll update it once we integrate support for
Rails 7.0.

I also manually tested that metadata is still stripped when using both
adapters.
  • Loading branch information
waiting-for-dev committed Mar 28, 2022
1 parent b3b16ce commit a502886
Show file tree
Hide file tree
Showing 4 changed files with 7 additions and 2 deletions.
1 change: 1 addition & 0 deletions .dockerdev/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ RUN apt-get update -qq \
curl \
git \
imagemagick \
libvips \
libmariadb-dev \
sqlite3 \
libsqlite3-dev \
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,9 @@ def variant(style = nil)
size = style_to_size(style)
@attachment.variant(
resize_to_limit: size,
strip: true
saver: {
strip: true
}
).processed
end

Expand Down Expand Up @@ -58,7 +60,7 @@ def metadata
end

def normalize_styles(styles)
styles.transform_values { |v| v.split('x') }
styles.transform_values { |v| v.split('x').map(&:to_i) }
end

def style_to_size(style)
Expand Down
1 change: 1 addition & 0 deletions core/lib/spree/testing_support/dummy_app.rb
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ class Application < ::Rails::Application
}
}
config.active_storage.service = :test
config.active_storage.variant_processor = ENV.fetch('ACTIVE_STORAGE_VARIANT_PROCESSOR', :mini_magick).to_sym
end
end

Expand Down
1 change: 1 addition & 0 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,7 @@ services:
HISTFILE: "/home/solidus_user/history/bash_history"
MYSQL_HISTFILE: "/home/solidus_user/history/mysql_history"
RAILS_ENV: development
ACTIVE_STORAGE_VARIANT_PROCESSOR: "mini_magick"
ports:
- "${SANDBOX_PORT:-3000}:${SANDBOX_PORT:-3000}"
volumes:
Expand Down

0 comments on commit a502886

Please sign in to comment.