【发布时间】:2014-07-07 12:01:35
【问题描述】:
我在我目前正在工作的项目中使用 sidekiq-superworkers 和 sidekiq。我已经设置了 Sidekiq::Testing.inline!在我的集成测试的 spec_helper 下,超级工人有什么类似的吗?我需要运行工作人员并等待他们完成以执行一些断言,这如何实现?
【问题讨论】:
标签: ruby-on-rails ruby rspec sidekiq
我在我目前正在工作的项目中使用 sidekiq-superworkers 和 sidekiq。我已经设置了 Sidekiq::Testing.inline!在我的集成测试的 spec_helper 下,超级工人有什么类似的吗?我需要运行工作人员并等待他们完成以执行一些断言,这如何实现?
【问题讨论】:
标签: ruby-on-rails ruby rspec sidekiq
据我所知,Superworker 无法在其 create 块内指定条件。
我遇到了类似的问题,我必须等待一组作业完成才能执行某些操作,然后我继续使用sidekiq_status。
基本思想是收集您启动的作业的所有作业 ID,然后在执行下一个操作之前轮询是否有任何作业仍在处理。
例如:
job_pool = []
(1..100).each do
# Collect all the job ids that you have launched.
job_pool.push SomeWorker.perform_async
end
jobs_are_working = true
while jobs_are_working
# Wait as long as at least one job is working or waiting
waiting_job = job_pool.detect do |job_id|
job_status = SidekiqStatus::Container.load(job_id).status
job_status == "waiting" || job_status == "working"
end
end
将整个等待部分包装在 Timeout 块中可能是个好主意,这样您就不会无限期地卡住。
【讨论】: