2015-12-12 65 views
1

如何使用sidekiq在後臺運行方法?目前,我有這樣的事情:Sidekiq和after_create回調

order.rb

class Order < ActiveRecord::Base 
include Badges 
belongs_to :user 

end 

關注/ badges.rb

module Badges 
extend ActiveSupport::Concern 

included do 
    after_update :badges 
end 

def badges 
    streak = user.selling_streak.value 
    case streak 
    when 3 
     user.add_badge(5) unless user.badges.any? {|b| b.id == 5} 
    when 5 
     user.add_badge(6) unless user.badges.any? {|b| b.id == 6} 
    end 
end 
end 

我已經把徽章方法引入關注,這將在一個after_update回調運行在訂單模型。我怎樣才能把整個方法與sidekiq放在後臺進程中?

+0

因爲我訂單發生後有很多計算(計算餘額等)。我在考慮將所有這些背景放在一起以便優化性能會更好嗎? – pyfl88

+0

你是否按照入門指南? https://github.com/mperham/sidekiq/wiki/Getting-Started – iltempo

回答

0

要在您的應用中使用sidekiq將非常簡單。它基本上是繼examples from the sidekiq website和copy'n」粘貼代碼:

更改concers/badges.rb產生sidekiq工作:

module Badges 
    extend ActiveSupport::Concern 

    included do 
    after_update :assign_badges 
    end 

    def assign_badges 
    BadgesAssignment.perform_async(user.id) 
    end 
end 

,並創建一個sidekiq工人類:

class BadgesAssignment 
    include Sidekiq::Worker 

    def perform(user_id) 
    user = User.find_by(id: user_id) 

    if user 
     streak = user.selling_streak.value 
     case streak 
     when 3 
     user.add_badge(5) unless user.badges.any? {|b| b.id == 5} 
     when 5 
     user.add_badge(6) unless user.badges.any? {|b| b.id == 6} 
     end 
    end 
    end 
end 
相關問題