Resque:从另一个作业中调用#perform_later并不会触发其他作业

时间:2018-04-04 00:54:47

标签: ruby-on-rails ruby resque

我有一个问题,很可能是我做了一些奇怪的事情,但我不能为我的生活弄清楚:

我有一份应该启动一系列子工作的父工作,但这些子工作永远不会执行。

这是父母的工作:

class TriggerJob < ApplicationJob
  def perform
    start_events
  end

  around_perform do |_, block|
    p 'TriggerJob before_perform'
    block.call
    p 'TriggerJob after_perform'
  end

  private

  def start_events
    events = Events.all

    events.each do |event|
      event.connectors.each do |connector|
        p "Stopping connector #{connector.id} for event #{event.id}"

        StopConnectorJob.perform_later(connector.id)
      end
    end
  end
end

这是孩子的工作:

class StopConnectorJob < ApplicationJob
  @queue = :default

  class StopConnectorFailed < StandardError; end

  rescue_from(StandardError) do |exception|
    p "ERROR! #{exception.message}"
    raise(StopConnectorFailed, exception.message)
  end

  def perform(connector_id)
    p 'STOPPING CHARGE'
    connector = Connector.find(connector_id)
    do_stuff_with_the_connector(connector)
  end

  around_enqueue do |job, block|
    p "StopConnectorJob before_enqueue: #{Resque.count_all_scheduled_jobs}"
    p job.arguments
    block.call
    p "StopConnectorJob after_enqueue: #{Resque.count_all_scheduled_jobs}"
  end

  around_perform do |job, block|
    p 'StopConnectorJob before_perform'
    p job.arguments
    block.call
    p 'StopConnectorJob after_perform'
  end

  private


  def do_stuff_with_the_connector(connector)
    # ...
  end
end

当我运行基本作业时,这是输出的结果:

"TriggerJob before_perform"
"Stopping connector 4 for event 8"
"StopConnectorJob before_enqueue: 0"
[3]
"StopConnectorJob after_enqueue: 0"
"TriggerJob after_perform"

然后什么都没有。当我查看作业Web界面时,没有任何作业排队。使用redis-cli监视器进行监视时,没有redis记录。

如果我从#perform_later更改为#perform_now,则可以正常工作。但我希望这不会被阻止。

任何想法为什么我的工作都没有被运行,即使它们似乎应该已经入队,但我看不出它们是什么?

0 个答案:

没有答案