要从Active Storage中删除所有数据?

时间:2018-07-04 14:24:49

标签: ruby-on-rails ruby ruby-on-rails-5 ruby-on-rails-5.2

我想知道如何从活动存储中删除所有数据,甚至重置活动存储?有什么办法吗?预先谢谢你!

注意:我正在使用Rails 5.2

3 个答案:

答案 0 :(得分:6)

这个问题挑战了我,所以我在具有本地存储的虚拟应用程序上进行了一些测试。

我有一个普通的模型has_one_attached :avatar,其中/storage

在本地存储中,文件保存在rails console文件夹的子文件夹下,该子文件夹随机命名为两个字符。

与文件有关的信息存储在两个表中:

要完全清理两个表,我在ActiveStorage::Attachment.all.each { |attachment| attachment.purge } 中做了

ActiveStorage::Attachment.any? #=> false

此命令删除

  • 该表中的所有记录:ActiveStorage::Blob.any? #=> false
  • 所有blob:/storage
  • 位于{{1}}子文件夹下的所有文件;当然,子文件夹仍然是空的。

ActiveStorage仍然可以正常工作。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

对于开发环境,您只需从数据库中删除所有附件记录,并从remove文件夹中删除storage个文件。

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

delete from active_storage_attachments;

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

delete from active_storage_variant_records;

然后最后

delete from active_storage_blobs;