Rails 3 delayed_job "TypeError: can't dump anonymous module"

background-process, delayed-job, ruby-on-rails-3

Solution

Delayed jobs don't have to be an ActiveRecord model, you can add the functionality to a plain old Ruby class, see https://github.com/collectiveidea/delayed_job#custom-jobs

You probably don't want the controller action to be handled asynchronously as this would add an unnecessary delay to the HTTP request. My advice would be to queue up a job in the controller like so:

class CollectionsController < ApplicationController
  def add
    Delayed::Job.enqueue CollectionBuilderJob.new(@current_user.session_info)
  end
end

class CollectionBuilderJob < Struct.new(:session_info)
  def perform
    #code
  end
end

This approach allows you to test your delayed job in isolation

Problem

I have a controller action that I would like to be handled asynchronously. ``` class CollectionsController < ApplicationController def add #code end handle_asynchronously :add ``` When this is called I get a: TypeError: can't dump anonymous module The delayed_job documentation isn't clear whether the method has to be an ActiveRecord model method. I have seen examples where people use other classes to handle this, however my method uses session information. It's unclear to me whether that information would be available to another class. Any ideas? Thanks.

Original source

Related problems