関連するモデル オブジェクトが破棄されたときに、Amazon s3 上のファイルが削除されないように、特定のアップローダをセットアップしたいと考えています。
これは、アップロード モデル レコードが破棄されたにもかかわらず、2 番目の監査テーブル内で参照されているためです。
フォグ、キャリアウェーブ、s3 を使用しています。
関連するモデル オブジェクトが破棄されたときに、Amazon s3 上のファイルが削除されないように、特定のアップローダをセットアップしたいと考えています。
これは、アップロード モデル レコードが破棄されたにもかかわらず、2 番目の監査テーブル内で参照されているためです。
フォグ、キャリアウェーブ、s3 を使用しています。
私の知るremove_previously_stored_files_after_update
限り、モデルオブジェクトがモデルオブジェクトである場合にのみ機能するupdated
ため、設定中false
に古いものは削除されませんfile
update
しかし、あなたの場合、関連するモデルオブジェクトが破棄されたときにファイルがまだ存在していることを確認する必要があります
まあ、(ここでコードを調べれば)それを行うために現在利用可能なメカニズムは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
これにより、レコードがデータベースから削除されたときにファイルが確実にクリーンアップされます
これを行うより良い方法があれば教えてください
この助けを願っています
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