在后台使用 prawn 和 resque 生成 pdf

发布于 2024-11-17 15:51:28 字数 546 浏览 2 评论 0原文

我正在尝试通过 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' 

有谁知道怎么做吗?

I am trying to create a PDF document in the background via Resque background job.

My code for creating the PDF is in a Rails helper method that I want to use in the Resque worker like:

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

The create_pdf method is from the DocumentHelper but I am getting this error:

undefined method `create_pdf' 

Anyone know how to do this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少女净妖师 2024-11-24 15:51:28

您尝试从类方法 (self.perform) 调用实例方法 (create_pdf)。仅当您的 DocumentHelpercreate_pdf 定义为类方法时,您的代码才有效:

def self.create_pdf

如果您不需要在视图中访问 create_pdf,则您可以可以考虑将其作为实例方法移动到您的 Document 类中,然后您可以执行 @doc.create_pdf(pdf) 操作。

但是,如果您还需要在视图中访问 create_pdf,您可以将 module_function :create_pdf 放入您的 DocumentHelper 文件中,或者您可以在您的工作人员中动态添加此内容:

DocumentHelper.module_eval do
  module_function(:create_pdf)
end
DocumentHelper.create_pdf(pdf)

然后您可以正确调用DocumentHelper.create_pdf

另外,在 Rails 3 中,我认为您只需要 include DocumentHelper,而不是 include ActionView::Helpers::DocumentHelper

You're trying to call an instance method (create_pdf) from a class method (self.perform). Your code would only work if your DocumentHelper defined create_pdf as a class method:

def self.create_pdf

If you don't need access to create_pdf in your views, you may consider moving it to your Document class instead, as an instance method, and then you can do @doc.create_pdf(pdf).

However, if you need access to create_pdf in your views as well, you can either put a module_function :create_pdf inside your DocumentHelper file, or you can dynamically add this in your worker:

DocumentHelper.module_eval do
  module_function(:create_pdf)
end
DocumentHelper.create_pdf(pdf)

Then you can properly call DocumentHelper.create_pdf.

Also, in Rails 3, I think you only need include DocumentHelper, rather than include ActionView::Helpers::DocumentHelper.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文