我有一个问题,很可能是我做了一些奇怪的事情,但我不能为我的生活弄清楚:
我有一份应该启动一系列子工作的父工作,但这些子工作永远不会执行。
这是父母的工作:
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,则可以正常工作。但我希望这不会被阻止。
任何想法为什么我的工作都没有被运行,即使它们似乎应该已经入队,但我看不出它们是什么?