wicked_pdf_image_tag 查找图像时解析到 public 文件夹

wicked_pdf_image_tag resolves to public folder when looking for images

我想呈现用户以 PDF 格式上传的图像。 我正在将图像保存到当前 Rails 目录 public 文件夹中。

图像正在保存在 public 文件夹中。 在开发中一切正常,但在生产中,它认为图像是资产的一部分并引发 "image is not in the assets" 错误。 在开发中,它正在查看 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}")

但它 returns 一个资产错误,因为它在 public/assets 文件夹中查找。

我也试过使用

wicked_pdf_image_tag("/public#{image.original_filename}")

但它会生成 public/public 文件夹,图像不在其中,而是向上一层。

当我尝试检索图像时,我希望 wicked_pdf_image_tag 查看图像的 public/ 文件夹。

wicked_pdf_image_tag 是 shorthand for image_tag 的 shorthand,资产路径使用邪恶的 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/path。问题是 wicked_pdf 需要本地文件系统的绝对文件路径才能呈现(对于 html 预览,需要纯图像 url):

image_tag "file://#{File.expand_path("public/your_image_path_goes_here.jpg")}"

另外请注意,original_filename 不是您存储中该文件的名称,它是上传期间客户端计算机上的文件名称。您需要使用存储路径,这取决于您的上传库,例如对于 Paperclip 这将是 yourmodel.image.path