Using Sidekiq for Active Job and getting ActiveJob::DeserializationError
<p>I'm trying to use Sidekiq to run the below job.  </p>

<p>The job performs fine when not queued (perform_now) but fails when called as (perform_later), which uses Sidekiq.</p>

<pre><code>AddEmployeesToRoomJob.perform_now room  ## works fine
AddEmployeesToRoomJob.perform_later room  ## breaks in Sidekiq
</code></pre>

<p><strong>Error:</strong></p>

<pre><code>AddEmployeesToRoomJob JID-da24b13f405b1ece1212bbd5 INFO: fail: 0.003     sec
2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN:     {"class":"ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper","wrapped"    :"AddEmployeesToRoomJob","queue":"default","args":    [{"job_class":"AddEmployeesToRoomJob","job_id":"0ba5bd30-e281-49a7-a93f-    6e50445183ac","queue_name":"default","priority":null,"arguments":    [{"_aj_globalid":"gid://dragonfly/Room/1"}],"locale":"en"}],"retry":true,    "jid":"da24b13f405b1ece1212bbd5","created_at":1471704675.739077,"enqueued    _at":1471705036.6406531,"error_message":"Error while trying to     deserialize arguments: Couldn't find Room with     'id'=1","error_class":"ActiveJob::DeserializationError","failed_at":14717    04675.946183,"retry_count":4,"retried_at":1471705036.644416}
2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN:     ActiveJob::DeserializationError: Error while trying to deserialize     arguments: Couldn't find Room with 'id'=1
2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN:     /Users/tamlyn/.rvm/gems/ruby-2.2.3/gems/activerecord-    5.0.0.1/lib/active_record/relation/finder_methods.rb:357:in     `raise_record_not_found_exception!'
</code></pre>

<p><strong>My Job</strong>
    class AddEmployeesToRoomJob &lt; ApplicationJob
      queue_as :default</p>

<pre><code>  def perform(room)
    employees = Employee.all
    if employees.length &gt; 0
      employees.each do |employee|
        UserRoom.create(user: employee, room: room)
      end
    end
  end
end
</code></pre>

<p><strong>My Thoughts</strong>
I don't understand why it can't find the room which I'm passing into the perform method.  It's as though it somehow loses that variable in the queueifying / JSONifying of the job?  </p>

<p>The Sidekiq docs say  </p>

<p>"Unfortunately this means that if the [Room] record is deleted after the job is enqueued but before the perform method is called, exception handling is different." </p>

<p>They suggest a workaround but I don't see how that would help me:</p>

<pre><code>rescue_from ActiveJob::DeserializationError do |exception|
    # handle a deleted user record
end
</code></pre>

<p>Thanks in advance for any help!</p>