2011-09-08 98 views
3

Rails w CarrierWave使用Fog在丟失附件/圖像時使用Fog刪除/銷燬記錄的正確方法是什麼?Rails,CarrierWave和霧 - 忽略丟失或覆蓋丟失的文件

我想清除一些記錄後圖像到RackSpace的缺少導入。有幾個失蹤的圖像和拇指。當我嘗試刪除記錄,我得到一個錯誤

霧::存儲:: Rackspace公司:: NOTFOUND

是否有CarrierWave或霧設置,使其更耐這些類型的場景?

回答

7

我只是碰到了這個問題,並發現提交的原來的問題在這裏:https://github.com/jnicklas/carrierwave/issues/481和wiki頁面描述修復此: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#L204https://github.com/jnicklas/carrierwave/blob/master/lib/carrierwave/mount.rb#L204

這兩種方法都只是調用remove!在上傳。所以解決這個問題最簡單的方法就是重寫remove!方法在上傳器中。那麼你只需要重寫一個方法並在一個地方。我overrride如下所示:

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 

試圖重新上傳圖片並覆蓋不存在圖像或當你只是試圖刪除不存在的圖像時,這應該解決您的問題。

〜Tom