Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby on Rails Sidekiq工人执行顺序_Ruby On Rails_Ruby_Sidekiq - Fatal编程技术网

Ruby on rails Ruby on Rails Sidekiq工人执行顺序

Ruby on rails Ruby on Rails Sidekiq工人执行顺序,ruby-on-rails,ruby,sidekiq,Ruby On Rails,Ruby,Sidekiq,我有带Sidekiq后台工作人员的rails应用程序 MyWorker1.perform_async(param_1) MyWorker1.perform_async(param_2) MyWorker1.perform_async(param_3) MyWorker1.perform_async(param_4) MyWorker2.perform_async(param_5) 如何使MyWorker2仅在所有MyWorker1完成工作时执行 您可以付费并使用Sidekiq pro:

我有带Sidekiq后台工作人员的rails应用程序

MyWorker1.perform_async(param_1)
MyWorker1.perform_async(param_2) 
MyWorker1.perform_async(param_3)
MyWorker1.perform_async(param_4)

MyWorker2.perform_async(param_5) 

如何使MyWorker2仅在所有MyWorker1完成工作时执行

您可以付费并使用Sidekiq pro:

或者在每个作业结束时保存完成状态,如果每个MyWorker1都已完成,则将MyWorker2排入队列:

# Worker1
def heavy_load(job_id)
  # do the load
  ...
  # save state
  WorkerReport.create(worker_id: job_id)
end

class WorkerReport < ActiveRecord::Base
  after_commit :do_next

  private

  # It's important to do that in after_commit block to evade strange bugs
  # When you create next job here, you are absolutely sure that
  # current WorkerReport is already saved to base
  def do_next
    # Check if other Worker1 jobs from current bundle are finished
    if self.where(...).exists?
      Worker2.perform_async(...)
    end
  end
end
#工人1
def重载(作业id)
#装货
...
#拯救国家
WorkerReport.create(worker\u id:job\u id)
结束
类WorkerReport
您可以付费使用Sidekiq pro,并使用:

或者在每个作业结束时保存完成状态,如果每个MyWorker1都已完成,则将MyWorker2排入队列:

# Worker1
def heavy_load(job_id)
  # do the load
  ...
  # save state
  WorkerReport.create(worker_id: job_id)
end

class WorkerReport < ActiveRecord::Base
  after_commit :do_next

  private

  # It's important to do that in after_commit block to evade strange bugs
  # When you create next job here, you are absolutely sure that
  # current WorkerReport is already saved to base
  def do_next
    # Check if other Worker1 jobs from current bundle are finished
    if self.where(...).exists?
      Worker2.perform_async(...)
    end
  end
end
#工人1
def重载(作业id)
#装货
...
#拯救国家
WorkerReport.create(worker\u id:job\u id)
结束
类WorkerReport
也许您可以保留工作结果1的结果,并在最后检查结果是否完整。如果你有一个完整的结果,从你的工作1开始工作2

MyWorker1.perform_async(param_1)->{done:false}

MyWorker1.perform_async(param_2)->{done:false}

MyWorker1.perform_async(param_3)->{done:false}

MyWorker1.perform_async(param_4)->{done:true}


MyWorker1->if result.done?MyWorker2

也许您可以保留Worker1结果的结果,并在最后检查结果是否完整。如果你有一个完整的结果,从你的工作1开始工作2

MyWorker1.perform_async(param_1)->{done:false}

MyWorker1.perform_async(param_2)->{done:false}

MyWorker1.perform_async(param_3)->{done:false}

MyWorker1.perform_async(param_4)->{done:true}

MyWorker1->if result.done?MyWorker2

您可以使用

然后是简单的步骤

flow = SampleWorkflow.new
flow.save 
然后开始工作

bundle exec gush workers
然后启动工作流

flow.start!
你可以用

然后是简单的步骤

flow = SampleWorkflow.new
flow.save 
然后开始工作

bundle exec gush workers
然后启动工作流

flow.start!