虾找不到本地存储的图像

时间:2016-02-03 08:21:54

标签: ruby-on-rails ruby prawn

我正在尝试使用Prawn将本地存储的图像渲染为PDF。这就是我在课堂上所做的......

def to_pdf
    cover = book.cover_url
    text cover
    image cover
    render
end

..期望它渲染图像路径,然后是图像本身。但我得到的是一个ArgumentError,它让我回到路径,“找不到/system/images/image.jpg”,这实际上是在我将其粘贴到地址栏时向我显示的图像。 book.cover_url输出相对路径作为字符串。此路径是正确的 - 如果我在视图中使用相同的代码,则会显示图像。

这也不起作用:

cover = "#{Rails.root}#{book.cover_url}"
image cover

这给我一个类似的错误(如预期的那样):

cover = "#{Rails.root}#{book.cover_url}"
image open(cover)

然而,这确实有效:

cover = "http://localhost/system/images/image.jpg"
image open(cover)

就像这样:

cover = "http://ecx.images-amazon.com/images/I/41EPYSumZvL._SX329_BO1,204,203,200_.jpg"
image open(cover)

Prawn似乎无法使用它提供的路径找到图像。这让我疯了。从文档来看,这应该都非常简单。

1 个答案:

答案 0 :(得分:0)

Rails.root为您提供rails应用程序位于文件系统上的文件路径 - 这与文件的URL无关。您应该改写您的.cover_url以提供绝对URL并创建一个输出相对路径的.cover_path方法。 (这与路径和资产助手在rails中的工作方式更为一致。)

如果您的图片可通过资源管道获取,则可以使用url_to_image