Создание pdf с креветкой в ​​фоновом режиме с помощью resque

Я пытаюсь создать PDF-документ в фоновом режиме с помощью задания задания Resque.

Мой код для создания 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'

Кто-нибудь знает, как это сделать?

1 ответ

Вы пытаетесь вызвать метод экземпляра (create_pdf) из метода класса (self.perform). Ваш код будет работать, только если ваш DocumentHelper определен create_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.

licensed under cc by-sa 3.0 with attribution.