我有一个控制器动作,希望异步处理。
class CollectionsController < ApplicationController
def add
#code
end
handle_asynchronously :add
调用此方法时,我得到一个:TypeError:无法转储匿名模块
尚不清楚delay_job文档是否该方法必须是ActiveRecord模型方法。我已经看到了人们使用其他类来处理此问题的示例,但是我的方法使用了会话信息。我不清楚该信息是否可供其他班级使用。
有任何想法吗?
谢谢。
延迟的工作不必是ActiveRecord模型,您可以将功能添加到普通的旧Ruby类中,请参见https://github.com/collectiveidea/delayed_job#custom-jobs
您可能不希望控制器动作被异步处理,因为这会给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
这种方法使您可以隔离测试延迟的工作
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句