【发布时间】:2017-06-19 19:14:45
【问题描述】:
我怀疑我们的一些活跃工作正在消失,但我不知道为什么。下面是我发现它消失的证据,但不是原因。
我们的网站使用外部云打印服务。我们开始工作,然后检查它们的状态。成功创建远程云打印后,我们创建一个活动作业以立即检查状态。如果它完成(成功或其他),它被标记为这样。如果不是,则检查状态作业会创建另一个作业,但会稍有延迟。延迟每次都会增加。
今天做了一次状态检查,日志显示等待时间达到了 128 秒。但是没有进行下一次状态检查,日志也没有错误。
我们使用由延迟作业支持的活动作业。状态检查作业的代码如下。它看不到逻辑中的任何缺陷,这些缺陷不会导致正确收集状态检查或再次尝试等待。
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分享代码吗?
标签: ruby-on-rails delayed-job rails-activejob