我想知道如何从活动存储中删除所有数据,甚至重置活动存储?有什么办法吗?预先谢谢你!
注意:我正在使用Rails 5.2
答案 0 :(得分:6)
这个问题挑战了我,所以我在具有本地存储的虚拟应用程序上进行了一些测试。
我有一个普通的模型has_one_attached :avatar
,其中/storage
在本地存储中,文件保存在rails console
文件夹的子文件夹下,该子文件夹随机命名为两个字符。
与文件有关的信息存储在两个表中:
要完全清理两个表,我在ActiveStorage::Attachment.all.each { |attachment| attachment.purge }
中做了
ActiveStorage::Attachment.any? #=> false
此命令删除
ActiveStorage::Blob.any? #=> false
/storage
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;