【问题标题】:Rails: How to disable ActiveStorage Analyzers and PreviewersRails:如何禁用 ActiveStorage 分析器和预览器
【发布时间】:2019-06-04 14:23:10
【问题描述】:

我有一个使用 ActiveStorage 的 Rails 5.2.3 应用程序。默认情况下,ActiveStorage 会运行一些后台作业以从附件中提取元数据,和/或创建缩略图以供预览。

我不想那样。我不需要任何元数据,也不需要任何缩略图。那么如何禁用这些后台作业呢?

根据official Rails guide,我已经设置了

config.active_storage.analyzers = []
config.active_storage.previewers = []

/config/application.rb.

但是,看起来它没有帮助。运行rails test时,我还是看到了

[ActiveJob] [ActiveStorage::AnalyzeJob] Performing ActiveStorage::AnalyzeJob (Job ID: 741592f5-c5e4-48d7-8cf9-158790fb8a00) from Inline(default) with arguments: #<GlobalID:0x00005642f9050748 @uri=#<URI::GID >>
[ActiveJob] [ActiveStorage::AnalyzeJob] (22.0ms)  SAVEPOINT active_record_1
[ActiveJob] [ActiveStorage::AnalyzeJob] ActiveStorage::Blob Update (22.7ms)  UPDATE `active_storage_blobs` SET `metadata` = '{\"identified\":true,\"analyzed\":true}' WHERE `active_storage_blobs`.`id` = 3056
[ActiveJob] [ActiveStorage::AnalyzeJob] (21.9ms)  RELEASE SAVEPOINT active_record_1   

我也尝试过通过初始化文件:

# /config/initializers/active_storage_disable_analyze.rb
Rails.application.config.active_storage.analyzers.delete ActiveStorage::Analyzer::ImageAnalyzer
Rails.application.config.active_storage.analyzers.delete ActiveStorage::Analyzer::VideoAnalyzer

但这也无济于事。

【问题讨论】:

    标签: ruby-on-rails rails-activestorage


    【解决方案1】:

    我根本不想或不需要任何分析,而覆盖模块方法似乎可以解决问题。

    ActiveStorage::Blob::Analyzable.module_eval do
    
      def analyze_later
      end
    
      def analyzed?
        true
      end
    end
    

    相当早期,所以我不能保证没有副作用,但到目前为止一切都很好,在我的 sidekiq 日志中不再看到任何 ActiveStorage::AnalyzeJob 条目,并且 blob 似乎完全可用,下载链接有效等。

    【讨论】:

    • 你给这个文件起什么名字,你把它保存在哪里?
    • app/decorators/active_storage/blob/analyzable_decorator.rb您可能还需要添加require 'active_storage/blob/analyzable'
    • @aqwan,我不明白/decorators/ 文件结构。你在某个地方需要“装饰器”吗?
    • 我知道这可能很糟糕,但我将此代码添加到模型文件的末尾has_one_attached。我尝试将它添加到初始化程序、application.rb、我的环境文件中。所有其他位置在ActiveStorage::Blob 的其他位置中断了方法调用
    • 这不是一个糟糕的解决方案,但是重写analyze_later 是不必要的,因为从analyzed? 返回true 将始终有效地跳过该工作。手动触发它的能力可能会派上用场。正如@Chiperific 提到的那样,将其放入模型文件中并不会限制其对该模型的影响。它可能是一个没有错误的地方,但仍会全局覆盖这些方法。
    【解决方案2】:

    没有简单的方法可以完全禁用分析器。当您删除不收集任何元数据的图像/视频分析器时,Rails 会退回到 NullAnalyzer

    你可以看到它的默认位置here

    【讨论】:

      猜你喜欢
      • 2012-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多