【问题标题】:Jekyll plugin using FastImage returns error with local images使用 FastImage 的 Jekyll 插件返回本地图像错误
【发布时间】:2015-11-26 19:53:29
【问题描述】:

我正在尝试编写一个 Jekyll 插件,它计算图像的纵横比并将其包装在该大小的容器中,以避免在加载页面时重排。我正在使用fastimage 来计算比率,现在它看起来像这样:

require 'fastimage'

module Jekyll
  class PlaceholderImageTag < Liquid::Tag

    def initialize(tag_name, markup, tokens)
      super
      @image_url = 'image_url'
    end

    def render(context)
      @index = Liquid::Template.parse("{{ forloop.index | minus: 1 }}").render(context)
      @base_url = Liquid::Template.parse("{{ site.#{@image_url} }}").render(context)
      @src = Liquid::Template.parse("{{ page.images[#{@index}].image }}").render(context)

      @size = FastImage.size("http://localhost:4000/public/images/"+@src)
      @ratio = (@size[1]*1.0/@size[0])*100

      placeholder = "<div class='placeholder' style='padding-bottom:#{@ratio}%'>"
      placeholder += "<img src=\"#{@base_url}\/#{@src}\"/>"
      placeholder += "</div>"
    end
  end
end

Liquid::Template.register_tag('placeholder_img', Jekyll::PlaceholderImageTag)

问题是当我在本地(localhost:4000)构建我的站点时,FastImage 返回和错误 - 如果我将 FastImage 指向不同的本地服务器(如 MAMP)或我的生产 URL,它工作得很好,但是使用 jekyll 服务器根本失败。

是否可以在不指向单独服务器的情况下让 FastImage 工作?

【问题讨论】:

    标签: ruby jekyll jekyll-extensions


    【解决方案1】:

    如果在您启动 jekyll 之前站点源代码中不存在 placeholder_img 标签,我发现我可以运行类似的插件。

    所以问题是,当您启动 jekyll 时,它会尝试在服务器运行之前构建静态文件,因此此时 FastImage 无法获取图像。

    尝试像这样启动 jekyll

    jekyll serve --skip-initial-build
    

    一旦任何文件被更改,jekyll 就会成功地重新生成并提供它。

    如果在 jekyll 未运行时更改了某些文件,您可能需要触摸这些文件以触发重新生成,或者在服务器已经运行时运行 jekyll build。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-15
      • 2021-08-25
      • 1970-01-01
      • 2019-10-19
      • 1970-01-01
      • 2016-11-15
      • 2023-03-11
      • 2012-11-20
      相关资源
      最近更新 更多