【发布时间】:2021-01-23 04:12:28
【问题描述】:
我在 Rails 中使用 Prawn 生成 PDF 文档。多年来,我只将 jpg 插入 PDF。最近,我需要将外部 PDF 插入 Prawn PDF。这样做的方法似乎是使用 CombinePDF 将 PDF 合并在一起。
如果我使用本地文档,则此功能可以成功运行。一旦 ActiveStorage 加入其中,它就会停止工作……它会超时。
- Rails -v 6.1.1
- Ruby -v 2.7.2p137
- 大虾-v 2.4
- 结合PDF -v 1.0.21
- 在 Heroku 上使用 Amazon S3
我使用的测试文件只有 50k 大小。无论我在开发或生产中(在heroku上)尝试这样做,都会发生完全相同的事情。在日志中我可以看到:
S3 Storage (716.2ms) Downloaded file from key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
然后......
Request ran for longer than 28000ms
宝石文件
gem "combine_pdf"
PdfsController
class PdfsController < ApplicationController
require 'combine_pdf'
require 'net/http'
include Rails.application.routes.url_helpers
def the_report
thing = Thing.find params[:thing_id]
documents = Document.with_attached_attachments.where(id: thing.document_ids).joins(attachments_attachments: :blob).where(blob: {content_type: 'application/pdf'})
respond_to do |format|
format.pdf do
prawn_pdf = TheReport.new(params[:thing_id]).render
final_pdf = CombinePDF.new
final_pdf << CombinePDF.parse(prawn_pdf)
documents do |doc|
doc.attachments.each do |attachment|
# time out occurs here
url = rails_blob_url(attachment, only_path: true)
final_pdf << CombinePDF.parse(Net::HTTP.get_response(URI.parse(url)).body)
end
end
send_data final_pdf.to_pdf, filename: "thing.pdf", type: 'application/pdf', disposition: 'inline', compress: true, optimize_objects: true
end
end
end
end
Net::HTTP.get_response 的请求似乎花费了太长时间。我该如何解决这个问题,和/或有更好的方法来解决这个问题?
【问题讨论】:
标签: pdf-generation ruby-on-rails-6 prawn combine-pdf