如何解决如何在heroku上使用CombinePDF和Rails 6ActiveStorage
我在 Rails 中使用 Prawn 生成 PDF 文档。多年来,我只将 jpg 插入到 PDF 中。最近,我需要将外部 PDF 插入到 Prawn PDF 中。这样做的方法似乎是使用 CombinePDF 将 PDF 合并在一起。
如果我使用本地文档,则此功能可以成功运行。一旦 ActiveStorage 加入,它就会停止工作……它超时了。
- Rails -v 6.1.1
- Ruby -v 2.7.2p137
- 大虾 -v 2.4
- CombinePDF -v 1.0.21
- 在 Heroku 上使用 Amazon S3
我使用的测试文件只有 50k 大小。无论我是在开发中还是在生产中(在 heroku 上)尝试这样做,都会发生完全相同的事情。在日志中我可以看到:
S3 Storage (716.2ms) Downloaded file from key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
然后……
Request ran for longer than 28000ms
Gemfile
宝石“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 上的请求似乎花费了太长时间。我怎样才能解决这个问题,和/或有更好的方法来完成这个?
解决方法
经过一系列的尝试和错误后,它似乎就这么简单
改变这个...
documents do |doc|
doc.attachments.each do |attachment|
url = rails_blob_url(attachment,only_path: true)
final_pdf << CombinePDF.parse(Net::HTTP.get_response(URI.parse(url)).body)
end
end
这...
documents do |doc|
doc.attachments.each do |attachment|
final_pdf << CombinePDF.parse(Net::HTTP.get_response(URI.parse(attachment.url)).body)
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。