我无法让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" }
具有讽刺意味的是,当我重新启动乘客它发送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
中创建了一个helperdef 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文件硬编码了,因为这就是我所需要的。仅适用于磁盘存储。欢迎改进