Ruby on rails 3 Rails 3延迟_作业“TypeError:无法转储匿名模块”

Ruby on rails 3 Rails 3延迟_作业“TypeError:无法转储匿名模块”,ruby-on-rails-3,delayed-job,background-process,Ruby On Rails 3,Delayed Job,Background Process,我有一个控制器动作,我想异步处理 class CollectionsController < ApplicationController def add #code end handle_asynchronously :add 当这被调用时,我得到一个: TypeError:无法转储匿名模块 延迟的作业文档不清楚该方法是否必须是ActiveRecord模型方法。我见过一些例子,人们使用其他类来处理这个问题,但是我的方法使用会话信息。我不清楚这些信息是否会提

我有一个控制器动作,我想异步处理

class CollectionsController < ApplicationController
    def add
    #code
    end
    handle_asynchronously :add
当这被调用时,我得到一个: TypeError:无法转储匿名模块

延迟的作业文档不清楚该方法是否必须是ActiveRecord模型方法。我见过一些例子,人们使用其他类来处理这个问题,但是我的方法使用会话信息。我不清楚这些信息是否会提供给其他班级

有什么想法吗


谢谢。

延迟作业不必是ActiveRecord模型,您可以将功能添加到普通的旧Ruby类中,请参阅

您可能不希望异步处理控制器操作,因为这会给HTTP请求增加不必要的延迟。我的建议是在控制器中排队作业,如下所示:

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

这种方法允许您单独测试延迟的作业

您不能在控制器方法上使用DJ。将其移动到一个模型中。

你能扩展一下你的答案吗,为什么会这样?这似乎是正确的。另外,为什么只将其放置在模型中?为什么不是静态单例?如果将方法设为类方法,请参见此处:请参见此处的答案: