3

Rails w CarrierWaveでFogを使用して、添付ファイル/画像が欠落している場合にレコードを削除/破棄する正しい方法は何ですか?

RackSpaceへの画像のインポートが欠落した後、いくつかのレコードをクリーンアップしようとしています。いくつかの欠落している画像と親指があります。レコードを削除しようとするとエラーが発生します

Fog :: Storage :: Rackspace :: NotFound

これらの種類のシナリオに対してより耐性を持たせるためのCarrierWaveまたはFog設定はありますか?

4

1 に答える 1

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つのベースアップローダーとサブクラスを書く傾向があります。だから私はそれらのメソッドを掘り下げました: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つのメソッドと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 に答える