二足歩行への一歩

技術者のハイハイの記録

rails sidekiqでバックグラウンドジョブ管理②

railsのバックグラウンドジョブ実行をsidekiqで実現する第2回。

本日はWorkerを作成する所からです。

本家では

Add a worker in app/workers to process messages asynchronously:

といっておりますので、 とりあえずappフォルダ以下にworkersという階層を作ります。

そして同階層にhogeWorker.rbを適当に作って(本家より引用)、

class HardWorker
  include Sidekiq::Worker
    def perform(name, count)
    # do something
  end 
end

といった形でクラスを作ります。

do something

にやらせたい処理を書いて下さい。

putsは実行するとsidekiqコンソールに表示されるので、 実際に動いているか確認する事が可能です。

で、ここまで整えば、後は呼ぶだけです。

    $rails c
      >HardWorker.perform_async

と実行すると、sidekiqが動いてくれます。 perform_asyncを呼ぶとperform内で定義した処理を、 ジョブ実行する感じです。

Workerは4種類のオプションをもっています(また本家引用)

    class HardWorker
      include Sidekiq::Worker
      sidekiq_options :queue => :crawler, :timeout => 60, :retry => false, :backtrace => true

      def perform(name, count)
      end
    end

:queue は実行時のキューを指定できます。defaultは'default'です。 :timeout はキューでの待ち時間です。defaultはnil。動作的には無制限っぽいです。 :retry はジョブ失敗時にリトライするかどうかです。defaultはtrue。 :backtrace はエラー時のバックトレースを表示するかどうかっぽいです。

次は実際に蹴ってみてWEBUIで確認してみるところを。