繁体   English   中英

在 wicked_pdf 中使用 ActiveStorage 图像

[英]Use ActiveStorage Image in wicked_pdf

我无法让 ActiveStorage 图像在生产中工作。 我想在我生成的 PDF 正文中使用调整大小的图像(变体)。

= image_tag(@post.image.variant(resize_to_limit: [150, 100]))

它在开发中有效,但在生产中生成 PDF 会无限期地挂起,除非我把那条线拿出来。

我已经尝试过@post.image.variant(resize_to_limit: [150, 100]).processed.url和设置Rails.application.default_url_options = { host: "example.com" }

具有讽刺意味的是,当我重新启动Passenger 时,它会将PDF 发送到浏览器,它实际上看起来还不错。 图像包括在内。

这是类似的:

= wicked_pdf_image_tag(@post.image.variant(resize_to_limit: [150, 100]).processed.url)

Rails 7.0.3、Ruby 3.1.2、wicked_pdf 2.6.3

感谢@Unixmonkey,我添加了passenger_min_instances 3; 到我的 Nginx 配置中的服务器块,它最初可以工作,但会在负载下挂起乘客。 因为我没有内存来增加这个数字,所以我想出了一个基于从文件中读取图像的不同解决方案。

= image_tag(active_storage_to_base64_image(@post.image.variant(resize_to_limit: [150, 100])))

然后我在 application_helper.rb 中创建了一个助手

def active_storage_to_base64_image(image)
  require "base64"
  file = File.open(ActiveStorage::Blob.service.path_for(image.processed.key))
  base64 = Base64.encode64(file.read).gsub(/\s+/, '')
  file.close
  "data:image/png;base64,#{Rack::Utils.escape(base64)}"
end

我已经为PNG文件对其进行了硬编码,因为这就是我所需要的。 仅适用于磁盘存储。 欢迎改进

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM