Rails 6 如何检查 sidekiq 作业是否 运行
Rails 6 how to check if sidekiq job is running
在我的 Rails 6 API 唯一的应用程序中,我有 FetchAllProductsWorker
后台作业,大约需要 1 小时 30 分钟。
module Imports
class FetchAllProductsWorker
include Sidekiq::Worker
sidekiq_options queue: 'imports_fetch_all'
def perform
# do some things
end
end
end
在此期间,前端应用程序向 BE 上的端点发送请求,检查作业是否仍在 运行。我需要发送那个过程的 true/false
。根据文档,有一种扫描方法 - https://github.com/mperham/sidekiq/wiki/API#scan 但即使工作人员已启动并且 运行:
,其中的 none 对我也有效
# endpoint method to check sidekiq status
def status
ss = Sidekiq::ScheduledSet.new
render json: ss.scan('FetchAllProductsWorker') { |job| job.present? }
end
控制台显示:
> ss.scan("\"class\":\"FetchAllProductsWorker\"") {|job| job }
=> nil
> ss.scan("FetchAllProductsWorker") { |job| job }
=> nil
如何检查特定的 sidekiq 进程是否未完成?
也许这对某人有用。 Sidekiq 使用 Sidekiq::Workers
https://github.com/mperham/sidekiq/wiki/API#workers
提供对当前活跃工作者的编程访问
因此,基于此我们可以做类似的事情:
active_workers = Sidekiq::Workers.new.map do |_process_id, _thread_id, work|
work
end
active_workers.select do |worker|
worker['queue'] == 'imports_fetch_all'
end.present?
在我的 Rails 6 API 唯一的应用程序中,我有 FetchAllProductsWorker
后台作业,大约需要 1 小时 30 分钟。
module Imports
class FetchAllProductsWorker
include Sidekiq::Worker
sidekiq_options queue: 'imports_fetch_all'
def perform
# do some things
end
end
end
在此期间,前端应用程序向 BE 上的端点发送请求,检查作业是否仍在 运行。我需要发送那个过程的 true/false
。根据文档,有一种扫描方法 - https://github.com/mperham/sidekiq/wiki/API#scan 但即使工作人员已启动并且 运行:
# endpoint method to check sidekiq status
def status
ss = Sidekiq::ScheduledSet.new
render json: ss.scan('FetchAllProductsWorker') { |job| job.present? }
end
控制台显示:
> ss.scan("\"class\":\"FetchAllProductsWorker\"") {|job| job }
=> nil
> ss.scan("FetchAllProductsWorker") { |job| job }
=> nil
如何检查特定的 sidekiq 进程是否未完成?
也许这对某人有用。 Sidekiq 使用 Sidekiq::Workers
https://github.com/mperham/sidekiq/wiki/API#workers
因此,基于此我们可以做类似的事情:
active_workers = Sidekiq::Workers.new.map do |_process_id, _thread_id, work|
work
end
active_workers.select do |worker|
worker['queue'] == 'imports_fetch_all'
end.present?