当前位置 : 主页 > 编程语言 > ruby >

ruby-on-rails – Rails,CarrierWave和Fog – 在销毁或覆盖时忽略丢失的文件

来源:互联网 收集:自由互联 发布时间:2021-06-23
Rails中的正确方法是什么是CarrierWave在丢失附件/图像时使用Fog删除/销毁记录? 我想在丢失图像导入RackSpace后清理一些记录.有一些丢失的图像和拇指.当我尝试删除记录时,我收到错误 雾
Rails中的正确方法是什么是CarrierWave在丢失附件/图像时使用Fog删除/销毁记录?

我想在丢失图像导入RackSpace后清理一些记录.有一些丢失的图像和拇指.当我尝试删除记录时,我收到错误

雾::存储:: Rackspace公司:: NOTFOUND

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

我刚刚遇到这个问题,发现原始问题在这里提交: https://github.com/jnicklas/carrierwave/issues/481和描述修复的维基页面: https://github.com/jnicklas/carrierwave/wiki/How-To%3A-Silently-ignore-missing-files-on-destroy-or-overwrite

但是我对解决方案不满意,我不想将这两种方法添加到我使用上传器的所有模型中.我倾向于编写1个基本上传器和子类,以满足特定需求的任何变化.所以我挖掘了这些方法:删除_#{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!在上传者.因此,解决问题的最简单方法是覆盖删除!上传器中的方法.然后你只需要覆盖一个方法并在一个地方.我的覆盖如下所示:

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

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

〜汤姆

网友评论