Carrierwave - 仅在已从存储中删除已装入的文件后销毁对象

时间:2014-03-13 21:21:21

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

Carrierwave在对象销毁完成后删除文件:

after_commit :remove_avatar! :on => :destroy

https://github.com/carrierwaveuploader/carrierwave

我有一个删除文件的工人。如果其中一个工作人员在从S3删除文件时超时,我就会失去对S3上文件的跟踪,而我的存储桶变得一团糟(因为我的对象已安装文件已从我的数据库中消失)。

我应该如何处理? 在remove_avatar!之前直接致电object.destroy,然后skip_callback?是否安全?

1 个答案:

答案 0 :(得分: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