【问题标题】:Is it possible to prevent ActiveStorage from deleting file on service storage?是否可以防止 ActiveStorage 删除服务存储上的文件?
【发布时间】:2021-02-25 16:58:03
【问题描述】:

我正在使用 ActiveStorage 来处理我的 rails 应用程序中的附件。 更新模型的附件时,它似乎将清除作业排入队列,并删除了远程存储服务上以前的附件(此处为S3)。

我不希望我的S3 存储桶中的文件被系统地删除(即使我的数据库中没有附加记录),是否可以防止这些清除作业被排队?

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案1】:

    如@yoLotus所述

    如果没有为附件设置:dependent 选项,则默认为:purge,这会导致它在删除相关记录时删除附件。

    要覆盖此行为,您必须将 :dependent 选项设置为 :purge_later

    假设您有一个附有图像的帖子,并且您不想在帖子被删除时删除附加的图像。

    你会怎么做:

    has_one_attached :image, dependent: :purge_later
    

    【讨论】:

      【解决方案2】:

      再次阅读文档后:

      如果未设置:dependent 选项,则只要记录被销毁,附件就会被清除(即销毁)。

      【讨论】:

        【解决方案3】:

        可以这样做:

        has_one_attached :photo, dependent: :detach
        

        Reference

        编写自定义 S3 服务也可以解决问题:

        require "active_storage/service/s3_service"
        
        class ActiveStorage::Service::CustomS3Service < ActiveStorage::Service::S3Service
          attr_reader :detach
          def initialize(bucket:, upload: {}, **options)
            @detach = options[]
          end
        
          def delete(key)
           instrument :delete, key: key do
             detach ? object_for(key).detach : object_for(key).delete
           end
          end
        end
        

        【讨论】:

          猜你喜欢
          • 2018-09-30
          • 2018-09-27
          • 1970-01-01
          • 2019-03-19
          • 1970-01-01
          • 2021-05-31
          • 1970-01-01
          • 2017-02-06
          • 1970-01-01
          相关资源
          最近更新 更多