Rails

設置 Sidekiq

Sidekiq 是一個並發處理 Ruby 任務的套件,將任務 push 至 redis 的 queue 中,sidekiq 中的 workers 再到 queue pop 一個任務出來接。

楊竑昕
人生比寫 Code 難一點點

--

安裝

# Gemfile
gem 'sidekiq'
# console
$ bundle install

設置

Sidekiq

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

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

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

# config/sidekiq.yml:concurrency: 16
:queues:
— [‘default’, 1]
— [“mailers”, 1]

ActiveJob 使用 Sidekiq

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

# environments/development.rb
config.active_job.queue_adapter = :sidekiq
# environments/production.rb
config.active_job.queue_adapter = :sidekiq

設置 Sidekiq 管理介面

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

# config/routes.rbrequire 'sidekiq/web'
mount Sidekiq::Web => '/sidekiq'

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

# config/routes.rbrequire 'sidekiq/web'authenticate :user, ->(u) { Ability.new(u).can? :manage, :admin } do
mount Sidekiq::Web => 'admin/sidekiq'
end

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

執行

$ sidekiq -C config/sidekiq.yml

--

--