2016-08-24 21 views
0

說我有一份工作,在這樣一個單獨的線程觸發關閉:Sidekiq作業存儲對類常量的引用,還有其他什麼? Rails的

TaxCalculator.perform_async({ user_id: user.id, description: 'test description', count: 1 }) 

說實際的類是一樣的東西:

class TaxCalculator 
    def perform(args) 
     user = User.find(args['user_id']) 
     description = args['description'] 
     #some stuff goes on here 
    end 
end 

說排隊很長。有些事情會發生,也許代碼更改和部署已經完成。當工作終於開始時,需要什麼參考。如果班級名稱更改爲其他人喜歡說的Namespace::TaxCalculator,該作業是否會失敗? Sidekiq工作仍有哪些參考依據?參數?該ID?班級的名字?

+0

典型的建議是將SIGUSR1發送到Sidekiq守護程序,告訴它停止接受新工作,讓它完成運行隊列中的所有作業,用這些類型的更改重新部署您的代碼,發送SIGTERM殺死守護進程,並重新啓動它。 https://github.com/mperham/sidekiq/wiki/Deployment#overview – mwp

回答

2

在你的結構發生變化,你可以使用舊的常量爲紐帶,以新的,例如:

TaxCalculator = Namespace::TaxCalculator

...,並與未來的更新,你可以刪除該鏈接,因爲所有的工作是完了。

+2

確實,Sidekiq存儲班級名稱,所以如果您更改了班級名稱,則需要保留舊的班級名稱,直到所有舊作業都處理完畢。 –

相關問題