我怀疑我们的一些活动工作正在消失,但我不知道为什么。下面是我找到的一个证据它消失了,但不知道原因。
我们的网站使用外部云打印服务。我们启动作业,然后检查它们的状态。成功创建远程云打印后,我们创建一个主动作业立即检查其状态。如果已完成(无论成功与否),则将其标记为已完成。如果没有,则检查状态作业会创建另一个作业,并稍微延迟。延迟时间每次增加。
今天进行状态检查时,日志显示等待时间达到了128秒。但是下一个状态检查没有发生,而日志中也没有错误。
我们使用由delayed job支持的active job。下面是状态检查作业的代码。它看不到任何逻辑上的缺陷,这不会导致正确收集状态检查或等待的另一次尝试。
我们的网站使用外部云打印服务。我们启动作业,然后检查它们的状态。成功创建远程云打印后,我们创建一个主动作业立即检查其状态。如果已完成(无论成功与否),则将其标记为已完成。如果没有,则检查状态作业会创建另一个作业,并稍微延迟。延迟时间每次增加。
今天进行状态检查时,日志显示等待时间达到了128秒。但是下一个状态检查没有发生,而日志中也没有错误。
我们使用由delayed job支持的active job。下面是状态检查作业的代码。它看不到任何逻辑上的缺陷,这不会导致正确收集状态检查或等待的另一次尝试。
class CheckCloudPrintStatusJob < ApplicationJob
queue_as :default
def perform(cloud_print, count = 0)
cloud_print.update_status
unless cloud_print.finished?
count += 1
wait = 2**(count-1)
if count > 15
cloud_print.mark_as_failed
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "~~~~~~~~~~~~~~~~~~ Cloud printing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "Cloud print ##{cloud_print.id} failed"
puts "Finally waited #{wait} seconds and then cancelled."
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
else
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "~~~~~~~~~~~~~~~~~~ Cloud printing ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
puts "Checking status of cloud print ##{cloud_print.id}"
puts "Waiting #{wait} seconds and then retrying."
puts "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
CheckCloudPrintStatusJob.set(wait: wait.seconds).perform_later(cloud_print, count)
end
end
end
end
update_status
引发错误时会发生什么?您能分享一下update_status
中的代码吗? - Edmund Lee