2017-04-14 27 views
0

我正在運行Rails 4.2.8,我想讓我的工作只在特定條件下運行。目前我正在執行調用作業的代碼,但是它將更加清晰地包含作業類中的邏輯。有人做過嗎?Rails的ActiveJob - 如何停止工作在入隊前before_enqueue

class MyJob < ApplicationJob 
    before_enqueue do |job| 
    # check and stop job from being enqueued under certain conditions 
    end 
    def perform(args*) 
    # code here 
    end 
end 

我使用Sidekiq 4.2.10作爲後臺作業適配器。

回答

1

before_enqueue引發異常。來自DHH自己的信息:https://groups.google.com/forum/#!topic/rubyonrails-core/mhD4T90g0G4

這是意圖。我從來不喜歡在過濾器中返回false是如何停止執行的。有太多的副作用,如@stuff = Model.something_returning_false,意外停止回調鏈。在AJ中,如果您想停止執行,我們將採用顯式方法,要求您引發異常。我們將改變其他地方的回調,以擺脫Rails 5.0中的「虛假手段停頓」。

before_ *確實與在執行前編寫代碼的方式相同,但是可以將其抽象並混合在一起。因此,您可以在超級類中編寫before_ *回調,而無需孩子需要超級呼叫,或在你混入的模塊中。