Rails:如何禁用 ActiveStorage 分析器和预览器
Rails: How to disable ActiveStorage Analyzers and Previewers
我有一个使用 ActiveStorage 的 Rails 5.2.3 应用程序。默认情况下,ActiveStorage 会 运行 一些后台作业以从附件中提取元数据,and/or 创建用于预览的缩略图。
我不想这样。我不需要任何元数据,也不需要任何缩略图。那么如何禁用这些后台作业?
根据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
但这也无济于事。
没有简单的方法可以完全禁用分析器。当您删除 Image/Video 分析器时,Rails 回退到 NullAnalyzer,它不收集任何元数据。
你可以看到它默认的地方here
我根本不想也不需要任何分析,而且 over-riding 模块方法似乎可以解决问题。
ActiveStorage::Blob::Analyzable.module_eval do
def analyze_later
end
def analyzed?
true
end
end
很早,所以我不能保证没有副作用,但到目前为止一切顺利,在我的 sidekiq 日志中不再看到任何 ActiveStorage::AnalyzeJob 条目,blob 似乎完全可用,下载链接有效等。
config/initializers/override_as_blob.rb
Rails.application.config.to_prepare do
ActiveStorage::Blob.class_eval do
def analyzed?
# Do whatever override
if checksum.blank?
true
else
super
end
end
end
end
我有一个使用 ActiveStorage 的 Rails 5.2.3 应用程序。默认情况下,ActiveStorage 会 运行 一些后台作业以从附件中提取元数据,and/or 创建用于预览的缩略图。
我不想这样。我不需要任何元数据,也不需要任何缩略图。那么如何禁用这些后台作业?
根据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
但这也无济于事。
没有简单的方法可以完全禁用分析器。当您删除 Image/Video 分析器时,Rails 回退到 NullAnalyzer,它不收集任何元数据。
你可以看到它默认的地方here
我根本不想也不需要任何分析,而且 over-riding 模块方法似乎可以解决问题。
ActiveStorage::Blob::Analyzable.module_eval do
def analyze_later
end
def analyzed?
true
end
end
很早,所以我不能保证没有副作用,但到目前为止一切顺利,在我的 sidekiq 日志中不再看到任何 ActiveStorage::AnalyzeJob 条目,blob 似乎完全可用,下载链接有效等。
config/initializers/override_as_blob.rb
Rails.application.config.to_prepare do
ActiveStorage::Blob.class_eval do
def analyzed?
# Do whatever override
if checksum.blank?
true
else
super
end
end
end
end