在 Rails 6 中默认清除 blob
Purge blobs by default in Rails 6
删除 Rails 6 中的 ActiveStorage 对象不会清除 blob。它从数据库中删除记录,但文件仍然存在。需要手动调用 purge
或 purge_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 }
删除 Rails 6 中的 ActiveStorage 对象不会清除 blob。它从数据库中删除记录,但文件仍然存在。需要手动调用 purge
或 purge_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 }