1

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

开始尝试 Carrierwave Direct gem 直接进入 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 )

文件名以这种方式更改:

原始载波发生器: 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 标准 2x dyno (web) 1x dyno (worker)。images.patchvault.org是 S3 存储桶上云端 CDN 发行版的 CNAME。

4

0 回答 0