在 Rails 6 中默认清除 blob

Purge blobs by default in Rails 6

删除 Rails 6 中的 ActiveStorage 对象不会清除 blob。它从数据库中删除记录,但文件仍然存在。需要手动调用 purgepurge_later 才能永久删除文件。

这让我很吃惊,为什么要删除引用但保留文件?

有没有办法更改默认值并告诉 Rails 在删除记录时始终清除 blob/file?

或者,我可以手动检查是否已在 after_save 挂钩中删除任何附件,或者使用 cronjob 定期删除所有孤立文件。解决这个问题最惯用的方法是什么?

找到了。我正在使用 Apartment gem 并忘记排除 ActiveStorage 模型。公寓 gem 使用数据库视图,因此它会从数据库中删除引用,但我猜 purge_later 不会 运行 在同一数据库范围内。

config/initializers/apartment.rb 中排除 ActiveStorage 模型就成功了。

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