在Rails 6中默认清除blobs。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Rails 6中默认清除blobs。相关的知识,希望对你有一定的参考价值。

移除一个 活动存储 对象并没有清除blob,而是从数据库中删除了记录,但文件仍然存在。它删除了数据库中的记录,但文件仍然存在。我们需要手动调用 purgepurge_later 以便永久删除该文件。

这让我很意外,为什么要删除引用而保留文件?

有没有办法改变默认值,告诉Rails在记录被删除时总是清除blobfile?

或者,我可以手动检查是否有附件被删除,并在 after_save 钩子,或者用一个cronjob来定期删除所有孤儿文件。什么是最合适的方法?

答案

找到了,我正在使用Rails 6中的purge_later来清除blob。我使用的是 公寓 gem,并且忘记了排除ActiveStorage模型。Apartment gem使用数据库视图,所以它将从数据库中删除引用,但我猜测 purge_later 不在同一数据库范围内运行。

不包括在 config/initializers/apartment.rb 做到了这一点。

config.excluded_models = %w{ ActiveStorage::Attachment ActiveStorage::Blob }

以上是关于在Rails 6中默认清除blobs。的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Rails 6.1.0 后 ActiveStorage::Blob 的未定义方法“service_name”

以下代码片段是不是容易受到 Rails 5 中 SQL 注入的影响?

如何在rails中使用carrierwave保存blob文件

已解决在react+ts中 atnd 用 upload 组件报错Failed to execute ‘readAsArrayBuffer,param 1 is notof type Blob(代码片段

已解决在react+ts中 atnd 用 upload 组件报错Failed to execute ‘readAsArrayBuffer,param 1 is notof type Blob(代码片段

如何在rails中使用carrierwave保存blob文件