2014-03-13 54 views
0

刪除Carrierwave刪除文件對象的破壞已完成後:Carrierwave - 銷燬對象只安裝後的文件已經從存儲

after_commit :remove_avatar! :on => :destroy 

https://github.com/carrierwaveuploader/carrierwave

我有刪除文件的工人。如果其中一個工作者在從S3中刪除一個文件時超時,我就無法跟蹤S3上的文件,並且我的存儲桶變得很混亂(因爲我的對象具有掛載的文件已從我的DB中刪除)。

我該如何處理? 直接撥remove_avatar!我的object.destroy然後skip_callback?安全嗎?

回答

7
class User < ActiveRecord::Base 
    mount_uploader :avatar, AvatarUploader 

    before_destroy :clean_s3 

private 
    def clean_s3 
    avatar.remove! 
    avatar.thumb.remove! # if you have thumb version or any other version 
    rescue Excon::Errors::Error => error 
    puts "Something gone wrong" 
    false 
    end 
end 
+0

另外,如果您想清理剩餘的空目錄,請選中此項https://github.com/carrierwaveuploader/carrierwave/wiki/How-to%3A-Make-a-fast-lookup-able吸留目錄結構 – Yimanei