如何在Rails Sidekiq工人之间共享方法

时间:2019-11-10 13:22:54

标签: ruby-on-rails ruby

我在Rails应用程序中有两个sidekiq工人,我想知道在他们之间共享代码的最佳方法是什么。

class PriceReminderWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'

  def method_to_share
    stuff
  end 
end

class PriceNotificationWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'

  def method_to_share
    stuff
  end 
end

“ rails / ruby​​ way”是从父类继承还是添加新模块?

2 个答案:

答案 0 :(得分:1)

如果您认为PriceReminderWorkerPriceNotificationWorker都是PriceWorker的话,我会使用继承,而您想要共享的方法在{{1} }上下文。例如,在Rails中,所有模型都是PriceWorker

如果您要共享的方法仅利用了两个类共享的一些共同“特征”,我将在模块中包含这些方法。例如,在Ruby中,Array类和Hash类都共享一个“特征”,它们都实现了一个ApplicationRecord方法,该方法可以接受一个块并为其集合的每个成员调用该块。在这种情况下,两个类都包含foreach模块。

答案 1 :(得分:0)

您可以将共享方法放在模块中,然后将它们包含在工作程序类中。

module Workify
  def method_to_share
    puts "hooray we're DRY!"
  end
end

class PriceReminderWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'
end

class PriceNotificationWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'price_alerts'
end

两个工作程序类现在都可以访问模块中定义的方法。