class DelayedImpressionist def self.before_filter(*args) return end include ImpressionistController::InstanceMethods @queue = :low def initialize(request,controller_name,action_name,user,obj) @controller_name = controller_name @action_name = action_name @user = User.find user unless user.nil? @request = request end def self.perform(*args) arg = args[0] @request= DelayImpressionistRequest.new @request.restore(arg["request"]) obj = eval("#{arg["class"]}.find '#{arg['obj']['_id']}'") # imp = new(@request,arg["controller_name"],arg["action_name"],arg["user"],obj) new_impression = obj.impressions.build(:user_id=>arg["user"],:controller_name=>arg["controller_name"],:action_name=>arg["action_name"],:ip_address=>@request.remote_ip,:referrer=>@request.referer) @try = 1 loop do result = new_impression.save rescue false break if (result || @try >= 10) @try = @try + 1 puts "trying:#{@try}" end new_impression.save obj.update_attribute(:view_count,obj.impression_count) end private def user @user end def action_name @action_name end def controller_name @controller_name end def request @request end end