Ruby 使用FastImage的Jekyll插件返回本地图像错误

Ruby 使用FastImage的Jekyll插件返回本地图像错误,ruby,jekyll,jekyll-extensions,Ruby,Jekyll,Jekyll Extensions,我正在尝试编写一个Jekyll插件,该插件计算图像的纵横比,并将其包装在该大小的容器中,以避免加载页面时出现回流。我用它来计算这个比率,现在看起来是这样的: require 'fastimage' module Jekyll class PlaceholderImageTag < Liquid::Tag def initialize(tag_name, markup, tokens) super @image_url = 'image_url'

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

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)
需要“fastimage”
杰基尔模块
类占位符ImageTag
问题是,当我在本地构建我的站点(localhost:4000)时,FastImage返回并出错-如果我将FastImage指向另一个本地服务器(如MAMP)或我的生产URL,它工作正常,但是使用jekyll服务器完全失败


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

我发现,如果在启动jekyll之前站点源代码中没有占位符标记,我可以运行类似的插件

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

试着像这样启动杰基尔

jekyll serve --skip-initial-build
这样,一旦任何文件被更改,jekyll就会成功地重新生成并提供该文件

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