从CarrierWave fog移植CarrierwaveDirect版本文件名

时间:2018-11-10 13:40:13

标签: ruby-on-rails amazon-s3 carrierwave carrierwave-direct

所以我有9000多个原始图像,每个图像具有5-7个生成的尺寸,已经存储在S3上。将生产移至Heroku时,我们遇到的问题之一是大型主图像超时。

开始尝试使用Carrierwave Direct gem直接进入S3商店,然后进行异步处理,但是当我向基本上传器添加第三个include行时,便遇到了现有图像消失的问题:

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

文件名以这种方式更改:

原始载波生成: https://images.patchvault.org/uploads/issue/imageback/629/full_003b_a1_back.png

CW直接网址生成: 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(worker)。 images.patchvault.org是S3存储桶上的云端CDN发行版的CNAME。

0 个答案:

没有答案