2017-04-14 6 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_ * 콜백을 수퍼 클래스로 작성할 수 있습니다 super 또는 모듈을 섞어서 호출하십시오.