在resque中使用prawn在后台生成pdf
我正在尝试通过Resque后台作业在后台创建PDF文档。
我创建PDF的代码是在Rails帮助器方法中,我想在Resque工作器中使用,如:
class DocumentCreator @queue = :document_creator_queue require "prawn" def self.perform(id) @doc = Document.find(id) Prawn::Document.generate('test.pdf') do |pdf| include ActionView::Helpers::DocumentHelper create_pdf(pdf) end end end
create_pdf
方法来自DocumentHelper
但我收到此错误:
undefined method `create_pdf'
有人知道怎么做吗?
您正尝试从类方法( self.perform
)调用实例方法( create_pdf
)。 只有当DocumentHelper
将create_pdf
定义为类方法时,您的代码才有效:
def self.create_pdf
如果您不需要在视图中访问create_pdf
,您可以考虑将其作为实例方法移动到Document
类,然后您可以执行@doc.create_pdf(pdf)
。
但是,如果您还需要在视图中访问create_pdf
,则可以在您的DocumentHelper
文件中放置module_function :create_pdf
,也可以在您的worker中动态添加:
DocumentHelper.module_eval do module_function(:create_pdf) end DocumentHelper.create_pdf(pdf)
然后,您可以正确调用DocumentHelper.create_pdf
。
另外,在Rails 3中,我认为你只需要include DocumentHelper
,而不是include ActionView::Helpers::DocumentHelper
。