Railsで非同期処理を実現するsidekiqについて調べてわかったことをまとめます。
sidekiq自体はRails以外でも使えるものらしいです。
何ができるか
非同期処理を実現する。
例えば画像アップロードの処理を非同期にすることで、ユーザーは画像アップロードが終わるまで待つことなく他のページに遷移できて、快適。
必要なもの
- redisサーバー
- gem:
sidekiq
使い方
app/workers/◯◯_worker.rb
にクラスとメソッドを作成する
worker
class HogeWorker
include Sidekiq::Worker
def perform(id)
@event = Event.find(id)
@event.calculate_rank!
end
end
controller内で<クラス名>.<メソッド名>_async
でキューに入れる
controller
def ranking
HogeWorker.perform_async @event.id
end
トリガーを発火して実行する
コマンドラインでコマンドを実行したり、あらかじめ定義した条件に合致した時、キューに入った処理が実行されます。