所以我有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(因为它们不再存在)
/tmp
,我是否应该将处理移到异步状态?我也没有考虑其他解决方案:)
路径在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。