Перенос версии файла CarrierwaveDirect из CarrierWave fog - PullRequest
0 голосов
/ 10 ноября 2018

Итак, у меня есть 9000+ оригинальных изображений, каждое с 5-7 сгенерированными размерами, уже сохраненных на S3. Перенос производства в Heroku, и одна из проблем, с которыми мы сталкиваемся, это тайм-аут на больших мастер-изображениях.

Начал пытаться Gem Carrierwave Direct перейти прямо в хранилище S3 и затем обработать асинхронно, но столкнулся с проблемой исчезновения существующих изображений, как только я добавил третью строку включения в базовый загрузчик:

class BaseUploader < CarrierWave::Uploader::Base
  include CarrierWave::RMagick
  include CarrierWave::ImageOptimizer
  include CarrierWaveDirect::Uploader

  ...
end

CarrierwaveDirect изменяет формат имени файла (вот метод: https://github.com/dwilkie/carrierwave_direct/blob/29caaa8d399968258299b57c84eac2e5e6fc4cf7/lib/carrierwave_direct/uploader.rb#L153)

Имена файлов изменяются следующим образом:

Orig carrierwave gen: https://images.patchvault.org/uploads/issue/imageback/629/full_003b_a1_back.png

CW Прямой URL: https://images.patchvault.org/uploads/issue/imageback/629/003b_a1_back_full.png

Таким образом, имя версии перемещается от начала к концу загруженного имени файла. Это действительно имеет смысл, но я имею дело с 2 годами и 9k изображениями:)

Когда я включаю include CarrierWaveDirect::Uploader в BaseUploader, это меняет способ, которым URL генерируются в представлении, и, следовательно, все изображения 404 (так как они больше не существуют)

  1. Какая лучшая практика здесь? Я сохраняю в Fog, но так как он загружается в Heroku /tmp, я должен просто переместить обработку в асинхронный режим?
  2. Могу ли я изменить поведение, переопределив этот метод, или это запрет?
  3. Есть ли способ легко переписать имена файлов изображений на S3 в новый формат или это не нужно?

Открыт для других решений, о которых я тоже не думаю:)

Путь генерируется в base_uploader.rb:

def store_dir
  "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end

Rails 5.2.1, Ruby 2.5.2, Heroku-18 Standard 2x dyno (web) 1x dyno (рабочий). images.patchvault.org - это CNAME для облачного дистрибутива CDN на корзине S3.

...