---------- ОБНОВЛЕННЫЙ ОТВЕТ --------
Предыдущий обходной путь был недостаточно хорош для производственного сервера, поэтому мне пришлось использовать версию для разработки изgit repo установлен как подмодуль в vendor / prawn, как описано здесь: https://github.com/sandal/prawn/wiki/Using-Prawn-in-Rails
Проблема с памятью в групповом методе исчезла, но синтаксис / опции для вещей несколько изменились.Поэтому мне пришлось переписать код для генерации PDF.
Кроме того, трудно заставить подмодуль хорошо играть с git-репо для приложения Rails.Развертывание в производство было трудным.
---------- ОРИГИНАЛЬНЫЙ ОТВЕТ --------
Это не исправление, но оно решает проблемусделайте еще несколько групповых итераций, прежде чем он проявится:
- переопределите метод экземпляра Prawn :: Document с именем 'group'
- , используйте код из функции 'group' из новейшеговерсия для разработки prawn (от github.com)
Я сделал это, добавив файл в папку / lib моего приложения Rails.Этот файл будет содержать самоцветы креветок и определит тип mime для документа PDF:
class PdfPrawn
require 'prawn'
require 'prawn/core'
require 'prawn/table'
MIME_TYPE = "application/pdf"
end
class Prawn::Document
def group(second_attempt=false)
old_bounding_box = @bounding_box
@bounding_box = SimpleDelegator.new(@bounding_box)
def @bounding_box.move_past_bottom
raise RollbackTransaction
end
success = transaction { yield }
@bounding_box = old_bounding_box
unless success
raise Prawn::Errors::CannotGroup if second_attempt
old_bounding_box.move_past_bottom
group(second_attempt=true) { yield }
end
success
end
end
А затем в файле модели я определяю метод для создания моего PDF и использую что-то вроде этого:
def to_pdf
require "#{File.expand_path(RAILS_ROOT)}/lib/pdf_prawn"
pdf = Prawn::Document.new
# code to add stuff to PDF
pdf.render
end