问题描述
根据Rails(边缘)指南,对于System Test和Integration Test中使用的ActiveStorage,我们可以通过分别调用以下语句来进行维护工作
# System Test
FileUtils.rm_rf("#{Rails.root}/storage_test")
# Integration Test
FileUtils.rm_rf(Rails.root.join('tmp','storage'))
我想知道-
是否有Rails内置函数或rake命令或gem来执行以下操作?
- 删除孤立的blob(
ActiveStorage::Blob
条记录不再与任何ActiveStorage::Attachment
记录相关联) - 删除孤立文件(那些不再与任何
ActiveStorage::Blob
记录相关联的文件)
我看不到rails --tasks
有任何相关的瑞克任务。
当前,我正在使用
# remove blob not associated with any attachment
ActiveStorage::Blob.where.not(id: ActiveStorage::Attachment.select(:blob_id)).find_each do |blob|
blob.purge # or purge_later
end
和该脚本清除孤立文件(通过rails console
)
# run these ruby statement in project rails console
# to remove the orphan file
include ActionView::Helpers::NumberHelper
dry_run = true
files = Dir['storage/??/??/*']
orphan = files.select do |f|
!ActiveStorage::Blob.exists?(key: File.basename(f))
end
sum = 0
orphan.each do |f|
sum += File.size(f)
FileUtils.remove(f) unless dry_run
end
puts "Size: #{number_to_human_size(sum)}"
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)