【问题标题】:image_path always uses assets/ when I want just public/images当我只想要 public/images 时,image_path 总是使用 assets/
【发布时间】:2013-02-12 19:16:14
【问题描述】:

为什么image_path坚持在public/images中存储的图片路径前面追加assets/

我正在建立一个摄影师的网站,因此我们自然希望其中包含照片,包括随机选择的一些照片作为布局的一部分。此外,我建立了一个超级简单的画廊,只显示所有照片。这些图像文件存储在:

public/images/gallery

我得到了一个 ImageMagick gem 来将它们缩小到所需的大小。这些小文件存储在:

public/images/gallery/sm/

缩小是在页面加载时完成的,作为呈现布局 ERB 的一部分。我知道它最初可能听起来很糟糕,但它只会缩小一次图像,而延迟缩小意味着我们不必重新启动服务器来添加新照片(他想这样做)。

我的阅读表明资产管道是用于静态布局的东西,但这比那更动态。我被引导相信 public/images 是这些东西应该去的地方,特别是因为生产模式 Rails 抱怨生成的缩略图没有被编译。

输入问题:我将这些图像放在上面显示的路径中,并且 image_path 会返回看起来像资产管道路径的内容。当我将子目录展平并将所有内容都放在 public/images 中时,它甚至都不起作用。

我的解决方法是手动构建标签。那么image_path(以及扩展名image_tag)是否仅适用于资产管道?我应该从公共图像的字符串中构造标签吗?我还发现提到 image_path 应该首先在公共场合查找匹配的文件,但我也看到文档 (http://api.rubyonrails.org/classes/ActionView/Helpers/AssetTagHelper.html) 声称它不会验证它返回路径的东西的存在。

【问题讨论】:

    标签: ruby-on-rails api ruby-on-rails-3.2


    【解决方案1】:

    编辑:原始答案中的错误

    Rails 资产管道用于为应用程序启动时存在的资产提供服务。对于按照您的建议提供动态资产,有一个类似问题的答案:Rails 3.1 assets not recognizing new images uploaded by rmagick until server restart,它的答案比我刚才的答案要好得多。

    在四处搜索以改进我的第一个答案后,我认为创建 image_tag 的最佳解决方案是创建您自己的类似 image_tag 的助手。也许:

    def public_image_path(filename)
      [your path to that file]
    end
    
    def public_image_tag(filename, options={})
      image_tag(public_image_path(filename), options)
    end
    

    【讨论】:

    • 这基本上是我最终做的。作为附录,该方法的一部分需要包括我在路径的开头添加一个根斜杠,以结束一个像"/images/gallery/bob.jpg" 这样的字符串。该根斜线对于阻止 image_tag 认为它是一种资产很重要。编辑:也就是说,为什么这在默认情况下不起作用仍然令人困惑。
    • 我认为——从我的分数可以看出,我不是知识渊博的专家——这是因为资产管道是在启动时编译的,所以你的动态图像当时不可用.
    • 资产被编译到public 目录。由于文档声称它在生成路径之前没有验证资源的存在,我怀疑它只是总是假设它是一个资产,除非给出根斜线。我可以将其用作预期用途,但前提是它已记录在案。不幸的是,事实并非如此。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-03-09
    • 2021-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-27
    相关资源
    最近更新 更多