我想渲染用户以PDF格式上传的图像。
我将图像保存到当前的Rails目录public
文件夹中。
此刻,图像正在保存在公用文件夹中。
一切都在开发中起作用,但是在生产中,它认为图像是资产的一部分,并引发“图像不在资产中”错误。
在开发中,它正在查看公用文件夹内的正确路径。
在使用下面的代码生产时,它将在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}")
,但是由于它在public / assets文件夹中,因此返回资产错误。
我也尝试使用
wicked_pdf_image_tag("/public#{image.original_filename}")
但是它会生成public / public文件夹,该图像不在其中,而是上一层。
当我尝试检索图像时,我希望wicked_pdf_image_tag
查看图像的public/
文件夹。
答案 0 :(得分:2)
wicked_pdf_image_tag
是image_tag
的简写,其资产路径已通过错误的pdf规则解析(请参见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