Способ, которым я получил это, заключается в использовании плагина :refresh_metadata
вместо :restore_cached_data
, который я использовал изначально.Спасибо Янко за то, что указал мне в правильном направлении.
Чтение исходного кода дало некоторые полезные идеи.Плагин :store_dimensions
сам по себе не извлекает измерения - он добавляет ширину и высоту к хешу метаданных, так что когда базовый класс Shrine запрашивает метаданные , они также извлекаются.
Используя :restore_cached_data
, это делалось при каждом назначении.:restore_cached_data
использует :refresh_metadata
для внутреннего использования, поэтому мы можем использовать эти знания, чтобы вызывать его только при поступлении файла в хранилище.
У меня настроены :backgrounding
и :store_dimensions
в инициализаторе, чтобы конечный загрузчик можно было упростить до следующего:
class ImageUploader < Shrine
plugin :refresh_metadata
plugin :processing
process(:store) do |io, context|
io.refresh_metadata!(context)
io
end
end
Таким образом, сохранение данных, которые мы получаем из Uppy, происходит очень быстро, и мы позволяем фоновому заданию извлекать измерения, когда файл перемещается в хранилище,чтобы их можно было использовать позже.
Наконец, если у вас есть вопросы, связанные со Shrine, я настоятельно рекомендую его Google Group .Престижность Янко за то, что он не только создал удивительное программное обеспечение (серьезно, прочитайте источник), но и за его приверженность поддержке сообщества.