如何清理开发环境中的ActiveStorage记录和存储文件夹?

问题描述

根据Rails(边缘)指南,对于System TestIntegration Test中使用的ActiveStorage,我们可以通过分别调用以下语句来进行维护工作

  # System Test
  FileUtils.rm_rf("#{Rails.root}/storage_test")

  # Integration Test
  FileUtils.rm_rf(Rails.root.join('tmp','storage'))

我想知道-

是否有Rails内置函数或rake命令或gem来执行以下操作?

  1. 删除孤立的blob(ActiveStorage::Blob条记录不再与任何ActiveStorage::Attachment记录相关联)
  2. 删除孤立文件(那些不再与任何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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...