我有一個相當簡單的Rails 5應用程序來監控網站速度。它將作業發送到外部頁面速度測試服務,並定期檢查作業是否完成,如果是,則調用並存儲關於頁面的數據。與Sidekiq的Rails activejob在perform_later上產生多個作業
每個項目可以有多個頁面,並且每個頁面可以有多個作業,這是存儲測試服務響應的地方。
有一個activejob,帶有一個sidekiq後端,應該每分鐘運行一次,檢查是否運行的頁面,以及是否有任何被發現的啓動一個作業使其排隊。它還會檢查是否有任何入隊作業,如果找到它們,它會暫時掛起作業以檢查狀態並在完成後保存數據。
def perform()
#Todo:- Add some way of setting the status into the view and check for active here - no way to stop jobs at the mo!
pagestorun = Page.where("runtime < ?", DateTime.now)
pagestorun.each do |page|
job = Job.new(:status => "new")
page.jobs << job
updatedatetime(page)
end
if pagestorun.count != 0
#Run the queuejob task to pick out all unqueued jobs and send them to webpagespeedtest
QueuejobsJob.perform_later
end
#檢查隊列中的任何作業,然後安排下一步的任務 GetrunningtasksJob.perform_later FindjobstorunJob.set(等待:1.minute).perform_later() 結束
這似乎是工作作爲預計會有一段時間,但5分鐘左右後,兩個工作似乎最終同時產卵。最終每個人都會自己創造更多的東西,幾天之後,我每小時就會有成千上萬的人試圖跑步。盡我所知,沒有任何錯誤或失敗的工作,我找不到任何原因會發生。任何幫助將被讚賞:)