删除附件时跳过ActiveStorage文件清除



如标题所述,我正在尝试获取它,以便在用户删除系统中的附件后,我们可以跳过blob清除。原因是我们希望保留上传文件(或Blob(的副本,即使有人在我们的系统中删除了它们。由于ActiveStorage没有这方面的配置,我一直试图在ActiveStorage::Blob中对#purge方法进行猴子补丁,但没有成功。

这是我的初始化器:

# config/initializers/active_storage.rb
module CoreExtensions
module ActiveStorage
module Blob
def purge
raise "here"
end
end
end
end
ActiveSupport::Reloader.to_prepare do
ActiveStorage::Blob.include CoreExtensions::ActiveStorage::Blob
end

这似乎没有任何作用,当我删除文件时,我的raise永远不会被击中。

我也试过:

ActiveStorage::Blob.include CoreExtensions::ActiveStorage::Blob

没有ActiveSupport::Reloader.to_prepare块,但在启动应用程序时一直出现此错误:"未定义的方法`has_one_attached'">

有什么想法我可以成功地修补这个吗?跳过blob清除的其他想法也很受欢迎。

我最终发现这是有效的:

# config/initializers/active_storage.rb
Rails.application.config.after_initialize do
ActiveStorage::Blob.class_eval do
def purge
# skip purge
end
end
end

你可以猴子补丁ActiveStorage::Attachment

将初始值设定项代码更改为:

module MonkeyPatch
def purge
raise 'your patch here'
end
def purge_later
raise 'and here'
end
end
ActiveStorage::Attachment.prepend MonkeyPatch

默认情况下,它们是:

def purge
delete
blob&.purge
end
def purge_later
delete
blob&.purge_later
end

最新更新