Search code examples
ruby-on-railssidekiq

Pass Object to Sidekiq


I tried passing an small object to sidekiq, but it converts it to a hash. This object is a tracking object for mixpanel. I also tried accessing session variables in my Worker but they aren't available there either.

Thoughts?

Controller

MixpanelWorker.perform_async(@mixpanel, 'person', mixpanel_distinct_id, cleaned_params)

MixpanelWorker

  def perform(mixpanel_object, type_of_send, distinct_id, event)
    case type_of_send
    when 'person'
      mixpanel_object.people.set(distinct_id, event)
    when 'event'
      mixpanel_object.track(distinct_id, event)
    end
  end

Solution

  • Best way to approach the problem you are trying to solve is to save the object data in a database and then pass the id of @mixpanel to your MixpanelWorker job like so:

    @mixpanel = Mixpanel.create [your parameters]
    MixpanelWorker.perform_async @mixpanel.id, 'person', mixpanel_distinct_id, cleaned_params
    

    Then your MixpanelWorker would handle the job like this:

    def perform(mixpanel_id, type_of_send, distinct_id, event)
      mixpanel_object = Mixpanel.find mixpanel_id
    
      case type_of_send
       when 'person'
         mixpanel_object.people.set(distinct_id, event)
       when 'event'
         mixpanel_object.track(distinct_id, event)
      end
    end
    

    Also read the link that Mike Perham posted, I think he may know a little about Sidekiq ;).