環境
手順
早速やっていく
ここでは
- localのRedisサーバーにSidekiqを使う
- 混合しがちだが、SidekiqのWorkerは使わずRailsのActiveJobでJobを走らせる。
Gemfileに以下を追加
gem "sidekiq" gem 'redis-namespace'
config/sidekiq.ymlを作成して以下
:verbose: false :pidfile: ./tmp/pids/sidekiq.pid :logfile: ./log/sidekiq.log :concurrency: 1 :queues: - capture :retry: false
- concurrency: 並列数
- queues: 後述するキュー名 無指定だとdefaultだが混乱の元なので明示するように
- retry: falseなのはリトライ処理はSidekiq側ではなくActiveJob側で制御したいため
Jobの作成
rails generate job capture
typoしてしまったとかで削除したいときは destroy
rails destroy job capture
すると app/jobs/capture_job.rb が作成される
例えば以下に書き換える
class CaptureJob < ApplicationJob queue_as :capture def perform(id) p id end end
config/application.rb にて以下設定
config.active_job.queue_adapter = :sidekiq
最後にSidekiqが接続するRedisを記述 コンフリクトしないようにnamespaceで分けると吉
Sidekiq.configure_server do |config| config.redis = { url: 'redis://localhost:6379', namespace: "sample_sidekiq" } end Sidekiq.configure_client do |config| config.redis = { url: 'redis://localhost:6379', namespace: "sample_sidekiq" } end
実行
bundle exec sidekiq -C config/sidekiq.yml
を実行したあとに
CaptureJob.perform_later(1234)
とかでいける