3

当缺少附件/图像时,Rails w CarrierWave 使用 Fog 删除/销毁记录的正确方法是什么?

在缺少将图像导入 RackSpace 后,我正在尝试清理一些记录。有一些丢失的图像和拇指。当我尝试删除记录时出现错误

雾::存储::机架空间::未找到

是否有 CarrierWave 或 Fog 设置使其更能容忍此类场景?

4

1 回答 1

7

我刚刚遇到了这个问题,并在此处找到了原始问题:https ://github.com/jnicklas/carrierwave/issues/481和描述修复的 wiki 页面:https ://github.com/jnicklas/carrierwave/ wiki/How-To%3A-静默忽略丢失文件销毁或覆盖

但是我对解决方案不满意,我不想将这两种方法添加到我所有使用上传器的模型中。我倾向于编写 1 个基本上传器和子类,以满足对特定需求的任何更改。所以我研究了这些方法:remove_#{column_name}!并 remove_previously_stored_#{column_name} 并在此处找到主题: https ://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204和https://github.com/jnicklas/carrierwave/blob /master/lib/carrierwave/mount.rb#L204

这两种方法都只是调用remove!在上传器上。所以解决问题的最简单方法是覆盖删除!上传器中的方法。然后,您只需要在 1 个地方覆盖一种方法。我的覆盖如下所示:

class CloudfilesUploader < CarrierWave::Uploader::Base
  # Override to silently ignore trying to remove missing previous file
  def remove!
    begin
      super
    rescue Fog::Storage::Rackspace::NotFound
    end
  end
end

当您尝试重新上传图像并覆盖不存在的图像或尝试删除不存在的图像时,这应该可以解决您的问题。

〜汤姆

于 2011-11-18T15:44:24.960 回答