从 Active Storage 中删除所有数据?

Remove all data from Active Storage?

我想知道如何从 Active Storage 中删除所有数据甚至重置 Active Storage?有什么办法吗?提前致谢!

注意:我使用的是 Rails 5.2

这个问题对我提出了挑战,所以我用本地存储在我的虚拟应用程序上做了一些测试。

我有常用型号 User has_one_attached :avatar

在本地存储中,文件保存在 /storage 文件夹中,在随机命名的子文件夹下,由两个字符组成。

与文件相关的信息存储在两个table中:

彻底清理两个tables,我在rails console:

ActiveStorage::Attachment.all.each { |attachment| attachment.purge }

此命令删除

  • table中的所有记录:ActiveStorage::Attachment.any? #=> false
  • 所有斑点:ActiveStorage::Blob.any? #=> false
  • 位于 /storage 个子文件夹下的所有文件;当然,子文件夹仍然是空的。

ActiveStorage 仍然正常工作。

我希望远程存储具有相同的行为,具有正确的权限。

在我的本地开发环境中,每当我执行 rails db:reset 时,我也会 运行 rm -rf storage 清除所有 previously-saved 文件。 Rails 将在下次上传文件时自动重新创建 storage 目录。

毫无疑问ActiveStorage::Attachment.all.each { |attachment| attachment.purge }会清除所有记录,但如果你有很多文件,这将花费很长时间。

对于开发环境,您可以简单地从数据库中删除所有附件记录,并从 storage 文件夹中删除 remove 文件。

运行 rails dbconsole 并执行以下查询以删除附件记录。

delete from active_storage_attachments;

如果您在数据库中存储变体:

delete from active_storage_variant_records;

最后,

delete from active_storage_blobs;