【问题标题】:Sidekiq superworkers testing modeSidekiq superworkers 测试模式
【发布时间】:2014-07-07 12:01:35
【问题描述】:

我在我目前正在工作的项目中使用 sidekiq-superworkers 和 sidekiq。我已经设置了 Sidekiq::Testing.inline!在我的集成测试的 spec_helper 下,超级工人有什么类似的吗?我需要运行工作人员并等待他们完成以执行一些断言,这如何实现?

【问题讨论】:

    标签: ruby-on-rails ruby rspec sidekiq


    【解决方案1】:

    据我所知,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 块中可能是个好主意,这样您就不会无限期地卡住。

    【讨论】:

    • 感谢您的回复,但就我而言,我需要非常复杂的工作流程,而且我不想冒险自己编写自定义代码,因为时间很重要。我最终将 Workers 流程作为在集成测试中的 sidekiq 工作人员存根
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 2021-10-31
    • 2014-10-04
    • 2013-05-23
    • 1970-01-01
    相关资源
    最近更新 更多