Tôi có một sự nghi ngờ rằng một số công việc đang hoạt động của chúng tôi đang biến mất nhưng tôi không biết tại sao. Dưới đây là một trong những tôi đã tìm thấy bằng chứng cho sự biến mất của nó, nhưng không phải là lý do tại sao.Điều gì có thể khiến Rails Active Jobs được lên lịch biến mất?
Trang web của chúng tôi sử dụng dịch vụ in trên đám mây bên ngoài. Chúng tôi bắt đầu công việc và sau đó kiểm tra trạng thái của họ. Đã tạo thành công bản in từ xa trên đám mây, chúng tôi tạo một công việc hoạt động để kiểm tra trạng thái ngay lập tức. Nếu nó được hoàn thành (thành công hay cách khác), nó được đánh dấu như vậy. Nếu không thì công việc kiểm tra trạng thái sẽ tạo một công việc khác, với một chút chậm trễ. Sự chậm trễ tăng lên mỗi lần.
Một kiểm tra trạng thái ngày hôm nay, nhật ký cho biết thời gian chờ đạt 128 giây. Nhưng kiểm tra trạng thái tiếp theo không xảy ra, và cũng không có lỗi trong nhật ký.
Chúng tôi sử dụng công việc hoạt động được hỗ trợ bởi công việc bị trì hoãn. Mã cho công việc kiểm tra trạng thái là dưới đây. Nó không thể thấy bất kỳ lỗ hổng nào trong logic mà sẽ không dẫn đến việc kiểm tra trạng thái được thu thập chính xác hoặc một lần thử khác với sự chờ đợi.
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
những gì xảy ra khi 'update_status' đặt ra một lỗi? bạn cũng có thể chia sẻ mã trong 'update_status'? –