在 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)
Rails7.0.3,Ruby3.1.2,wicked_pdf2.6.3
感谢@Unixmonkey 我添加了passenger_min_instances 3;到我在 Nginx 配置中的服务器块,它最初工作但会在负载下挂起 Passenger。由于我没有足够的内存来增加这个数字,所以我想出了一个基于从文件中读取图像的不同解决方案。
= 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 文件对其进行了硬编码,因为这就是我所需要的。仅适用于磁盘存储。欢迎改进
我无法在生产环境中使用 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)
Rails7.0.3,Ruby3.1.2,wicked_pdf2.6.3
感谢@Unixmonkey 我添加了passenger_min_instances 3;到我在 Nginx 配置中的服务器块,它最初工作但会在负载下挂起 Passenger。由于我没有足够的内存来增加这个数字,所以我想出了一个基于从文件中读取图像的不同解决方案。
= 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 文件对其进行了硬编码,因为这就是我所需要的。仅适用于磁盘存储。欢迎改进