2011-09-08 4 views
3

添付ファイルや画像がないときにFogを使用してレコードを削除/破棄するRailsのCarrierWaveの正しい方法は何ですか?Rails、CarrierWave、and Fog - 破棄または上書きの際に欠落しているファイルを無視する

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

私は解決策と幸せではなかったが、私が持っていたくありませんでしたアップローダを使用するすべてのモデルにこれらの2つのメソッドを追加します。私は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

これらの両方のメソッドを呼び出すだけで削除!アップローダーでしたがって、この問題を解決する最も簡単な方法は、削除をオーバーライドすることです!メソッドをアップロードします。次に、1つのメソッドと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 

〜Tom

関連する問題