11

関連するモデル オブジェクトが破棄されたときに、Amazon s3 上のファイルが削除されないように、特定のアップローダをセットアップしたいと考えています。

これは、アップロード モデル レコードが破棄されたにもかかわらず、2 番目の監査テーブル内で参照されているためです。

フォグ、キャリアウェーブ、s3 を使用しています。

4

4 に答える 4

11

私の知るremove_previously_stored_files_after_update限り、モデルオブジェクトがモデルオブジェクトである場合にのみ機能するupdatedため、設定中falseに古いものは削除されませんfileupdate

しかし、あなたの場合、関連するモデルオブジェクトが破棄されたときにファイルがまだ存在していることを確認する必要があります

まあ、(ここでコードを調べれば)それを行うために現在利用可能なメカニズムはCarrierwaveないと思います

しかし、あなたは同じことを達成するために上書きすることができます.remove!これには設定が必要だと思いattr_accessorます.

目的のモデル内でattr_accessor(keep_fileなど)を定義します

目的のアップローダで remove をオーバーライドします。方法

class MyUploader < CarrierWave::Uploader::Base 
  def remove!
     unless model.keep_file
       super
     end
  end
end

attr_accessorオブジェクトを破棄する前に、(削除したファイルを保持したい場合) オブジェクトにを設定していることを確認してください。

u = User.find(10)
u.keep_file = true
u.destroy 

これにより、レコードがデータベースから削除されたときにファイルが確実にクリーンアップされます

これを行うより良い方法があれば教えてください

この助けを願っています

于 2013-07-19T19:40:49.823 に答える
10

すべてまたは一部のアップローダーのファイルを保持する

CarrierWave.configure do |config|
  config.remove_previously_stored_files_after_update = false
end

アップロードごとに設定したい場合:

class AvatarUploader < CarrierWave::Uploader::Base
  configure do |config|
    config.remove_previously_stored_files_after_update = false
  end

  ...
end
于 2013-06-25T16:31:06.080 に答える