移除一个 活动存储 对象并没有清除blob,而是从数据库中删除了记录,但文件仍然存在。它删除了数据库中的记录,但文件仍然存在。我们需要手动调用 purge
或 purge_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 }