我想渲染用户在 PDF 中上传的图像。
我将图像保存到当前 Rails 目录 public
文件夹。
图像正在公用文件夹中保存。
一切都在开发中有效,但在生产中,它认为图像是 Assets 的一部分,并引发“图像不在 Assets 中”的错误。
在开发中,它正在查看公用文件夹中的正确路径。
在使用以下代码进行生产时,它会查看 public/public
为图像。
这是我认为呈现 PDF 的代码。
<% @images.each do |image| %>
<% if Rails.env != "development" %>
<%= wicked_pdf_image_tag ("public/#{image.original_filename}")%>
<% else %>
<%= wicked_pdf_image_tag(image.original_filename)%>
<% end %>
<% end %>
我尝试使用
wicked_pdf_image_tag("public/#{image.original_filename}")
但它返回一个 Assets 错误,因为它查看 public/assets 文件夹。
我也尝试过使用
wicked_pdf_image_tag("/public#{image.original_filename}")
但它会导致公共(public)/公共(public)文件夹,图像不在里面,而是上一层。
当我尝试检索
wicked_pdf_image_tag
所期望的图像时看看public/
图像的文件夹。
最佳答案
wicked_pdf_image_tag
是 image_tag
的简写使用邪恶的 pdf 规则解析 Assets 路径(参见 wicked_pdf/wicked_pdf_helper/assets.rb):
def wicked_pdf_image_tag(img, options = {})
image_tag wicked_pdf_asset_path(img), options
end
def wicked_pdf_asset_path(asset)
if (pathname = asset_pathname(asset).to_s) =~ URI_REGEXP
pathname
else
"file:///#{pathname}"
end
end
因此,当您需要一些变化时,没有什么可以阻止您使用
image_tag
直接使用正确的图像 url/路径。问题是 wicked_pdf 需要本地文件系统的绝对文件路径才能呈现(以及用于 html 预览的纯图像 url):image_tag "file://#{File.expand_path("public/your_image_path_goes_here.jpg")}"
也不是
original_filename
不是您存储中该文件的名称,而是上传期间客户端计算机上的文件名称。您需要使用存储路径,这取决于您的上传库,例如对于 Paperclip,这将类似于 yourmodel.image.path
关于ruby-on-rails - wicked_pdf_image_tag 在查找图像时解析为公共(public)文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56690670/