先安裝redis
Mac的話執行以下指令
brew install redis
再來啟動 redis, commamd line 執行
redis-server
啟動後如圖:
安裝 sidekiq
先在Gemfile加上
#Gemfile
gem 'sidekiq'
執行
bundle install
執行sidekiq
bundle exec sidekiq
啟動後如圖:
理論上 這個都正常運作的話,大致上就沒什麼問題了
執行sidekiqe工作
新增 app/workers/ 資料夾, 可以將要執行背景工作的class都放在這裡
假設要做一個Email發信的工作
#/app/workers/mail_sender.rb
class MailSender include Sidekiq::Worker
def perform(mail_id)
mail = @mail.find(mail_id)
# ..
這裡執行發送的工作
# ..
end
end
在 Controller或是model,可以呼叫以下方法發送程式
MailSender.perform_aysnc(mail_id) # 呼叫perform這個class method但是記得多加上 _async
4.安裝sidekiq監控界面
sidekiq 提供一個界面可以讓管理者觀看,目前的背景工作的情況,和統計圖表
安裝方法:
在Gemfile加上
gem 'sinatra', require: false
gem 'slim'` 然後 bundle 安裝
然後 記得在route.rb加上
require 'sidekiq/web'
# ...
mount Sidekiq::Web, at: '/sidekiq'
如此只要在您的網站打上
http://[yourdomain_address]/sidekiq
就可進入此界面,圖如下
但是由於安全性的問題, 如果要限定管理員才能查看此頁面呢? 如果有使用devise,且user model 是存放使用者資料的地方 另外如果user model的admin回傳是true的是管理員的話
可以改為如下,如此就只有有認證過的使用者,且是管理員才能觀看/sidekiq
#routes.rb
authenticate :user, lambda { |u| u.admin? } do
mount Sidekiq::Web => '/sidekiq'
end
http://sidekiq.org/
http://railscasts.com/episodes/366-sidekiq
http://redis.io/topics/quickstart
http://blog.remarkablelabs.com/2013/01/using-sidekiq-to-send-emails-asynchronously
http://rubyist.marsz.tw/blog/2013-06-08/sidekiq/
https://github.com/mperham/sidekiq/wiki