ruby on rails - conflict delayed_job / sidekiq -


i have app both sidekiq , delayed job gems installed. when trigger handle_asynchronously in active record models appear handled sidekiq while trigger delayed_job.

is there way desactivate sidekiq specific model?

as mention in comment in order working have redefine/basically monkey patch handle_asynchronously method

anywhere (but make sure loaded )

in config/initializers/patch.rb code

module patch   def handle_asynchronously(method, opts = {})     aliased_method, punctuation = method.to_s.sub(/([?!=])$/, ''), $1     with_method, without_method = "#{aliased_method}_with_delay#{punctuation}", "#{aliased_method}_without_delay#{punctuation}"     define_method(with_method) |*args|       curr_opts = opts.clone       curr_opts.each_key |key|         if (val = curr_opts[key]).is_a?(proc)           curr_opts[key] = if val.arity == 1             val.call(self)           else             val.call           end         end       end       ## replace other syntax       # delay(curr_opts).__send__(without_method, *args)       __delay__(curr_opts).__send__(without_method, *args)     end     alias_method_chain method, :delay   end end  module.send(:include,patch) 

and believe rest follow way should :)

reason:

delayed::job include delay method on object , sidekiq include delay method on activerecord hence when class try invoke delay ancestors class (including eigen class) , find method define or included in activerecord::base class (which sidekiq delay)

why __delay__ work because alias define copy of existing method delay method of delayedjob , hence when invoke __delay__ method invoke delay method define delayedjob include object

note:

although solution bit patch works . keeping in mind every direct .delay methid invocation invoking delay method of sidekiq , not delayedjob invoke delayedjob delay method has call way __delay__

suggestion :

monkey patching bad practice on personal note rather not use 2 entirely different background processing library single application achieve same task. if task process thing in background why cant done single library either delayed_job or sidekiq (why required both of them )

so point , thing make background processing ease respect future sincerely advice take 1 of 2 library background processing , feel valid answer question instead of monkey patching doing other crazy stuff

hope help


Comments

Popular posts from this blog

How to remove text and logo OR add Overflow on Android ActionBar using AppCompat on API 8? -

html - How to style widget with post count different than without post count -

url rewriting - How to redirect a http POST with urlrewritefilter -