From 5a6d1ee25788f308985b8f5801d32fce0e4505bc Mon Sep 17 00:00:00 2001 From: Sam Date: Wed, 22 Aug 2018 14:36:56 +1000 Subject: [PATCH] FIX: defer actions in a static method This avoids capturing a huge closure and passing to defer --- app/controllers/topics_controller.rb | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/app/controllers/topics_controller.rb b/app/controllers/topics_controller.rb index 39f94a98ec4..8248c7543bc 100644 --- a/app/controllers/topics_controller.rb +++ b/app/controllers/topics_controller.rb @@ -783,8 +783,8 @@ class TopicsController < ApplicationController user_id = (current_user.id if current_user) track_visit = should_track_visit_to_topic? - Scheduler::Defer.later "Track Link" do - IncomingLink.add( + if !request.format.json? + hash = { referer: request.referer || flash[:referer], host: request.host, current_user: current_user, @@ -792,14 +792,26 @@ class TopicsController < ApplicationController post_number: params[:post_number], username: request['u'], ip_address: request.remote_ip - ) - end unless request.format.json? + } + # defer this way so we do not capture the whole controller + # in the closure + TopicsController.defer_add_incoming_link(hash) + end + TopicsController.defer_track_visit(topic_id, ip, user_id, track_visit) + end + + def self.defer_track_visit(topic_id, ip, user_id, track_visit) Scheduler::Defer.later "Track Visit" do TopicViewItem.add(topic_id, ip, user_id) TopicUser.track_visit!(topic_id, user_id) if track_visit end + end + def self.defer_add_incoming_link(hash) + Scheduler::Defer.later "Track Link" do + IncomingLink.add(hash) + end end def should_track_visit_to_topic?