Rails 的 sidekiq 設置筆記

Sidekiq 是一個能夠並發處理 Ruby 任務的套件,大致上的運作方法是:將任務 push 至 redis 的 queue 中,sidekiq 的 workers 再到 queue 一個個 pop 任務出來運算。

安裝

1
2
# Gemfile
gem 'sidekiq'
1
bundle install

設置

Sidekiq

https://github.com/mperham/sidekiq/wiki/Advanced-Options

ActiveJob 使用的 redis queue 名稱預設為 default,ActionMailer 使用的 redis queue 名稱預設為 mailers

concurrency 參數需要小於或等於 config/database.yml中的 pool 值。

1
2
3
4
5
# config/sidekiq.yml

:concurrency: 16
:queues: default
mailers

ActiveJob 使用  Sidekiq

https://github.com/mperham/sidekiq/wiki/Active-Job,在 environments/development.rbenvironments/production.rb 中填入:

1
config.active_job.queue_adapter = :sidekiq

設置 Sidekiq  管理介面

Sidekiq 提供了一個管理介面,見 https://github.com/mperham/sidekiq/wiki/Monitoring,要將此管理介面放入既有的 Rails 專案,只需要在 config/routes.rb中加入:

1
2
3
# config/routes.rb
require 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'

為 sidekiq 管理介面做權限控管,只讓 admin 可以查看管理介面,使用 devise + cancancan做例子:

1
2
3
4
5
# config/routes.rb
require 'sidekiq/web'
authenticate :user, ->(u) { Ability.new(u).can? :manage, :admin } do
mount Sidekiq::Web => 'admin/sidekiq'
end

authenticate :user, ->(u) { condition } 這個式子中的 conditiontrue 即可通過驗證。

執行

1
sidekiq -C config/sidekiq.yml
作者

楊竑昕

發表於

2019-06-11

更新於

2023-04-03

許可協議

評論