2014-02-21 87 views
1

好吧,我使用carrierwave並生成版本(縮略圖)。 存儲後端是Amazon S3。Carrierwave沒有從S3中刪除版本,只有原始文件

class Image < ActiveRecord::Base 
    mount_uploader :attachment, ImageUploader 
end 

當我打電話Image.find(1).destroy,原始文件被從S3移除:

https://myapp.s3.amazonaws.com/assets/9e966591195c64636825d3ea695f0fc3/61bf4c0c-f9f8-4d29-b794-7daf6d050446.jpg

但它的一個版本劇照有:

https://myapp.s3.amazonaws.com/assets/9e966591195c64636825d3ea695f0fc3/61bf4c0c-f9f8-4d29-b794-7daf6d050446_square.jpg

我懷疑該方法def full_filename(for_file)

class ImageUploader < CarrierWave::Uploader::Base 

    include CarrierWave::RMagick 
    include CarrierWave::MiniMagick 
    include CarrierWaveDirect::Uploader 

    def store_dir 
    "assets" 
    end 

    def cache_dir 
    "#{Rails.root}/tmp/images" 
    end 

    version :square do 
    process resize_to_fill: [200, 200] 
    def full_filename(for_file) 
     ext   = File.extname(for_file) 
     base_name = for_file.chomp(ext) 
     [base_name, version_name].compact.join('_') + ".jpg" 
    end 
    end 

end 

在此先感謝!

+0

我也推薦閱讀官方的CarrierWave Github頁面:https://github.com/carrierwaveuploader/carrierwave – HackerKarma

回答

4

替換下面的版本定義:

version :square do 
    process resize_to_fill: [200, 200] 
end 

你並不需要定義文件名Carrierwave將文件的新版本square_前綴。所以,它的獨特性無論如何。 當您致電Image.find(1).destroy時,Carrierwave銷燬原始文件,然後查找帶有square_*前綴的文件以進行刪除。

+0

你是不是要說'你不需要定義文件名...'請修復它。 – HackerKarma

+0

@ user3317140我修好了。感謝您指出:)。 –

+0

@Luccas請檢查更新的答案,並讓我知道它是否解決了您的問題。 –

相關問題