2015-11-26 1 views
2

Я пытаюсь написать плагин Jekyll, который вычисляет пропорции изображения и обертывает его в контейнер такого размера, чтобы избежать переполнения при загрузке страницы. Я использую fastimage для вычисления отношения, прямо сейчас это выглядит следующим образом:Плагин 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/"[email protected]) 
     @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) 

Вопрос заключается в том, что, когда я строю свой сайт локально (локальный: 4000) FastImage возвращается и ошибки - Если я указываю FastImage к другой локальный сервер (например, MAMP) или мой производственный URL-адрес, он работает отлично, однако использование сервера jekyll просто терпит неудачу.

Можно ли заставить FastImage работать, не указывая на отдельный сервер?

ответ

0

Я нахожу, что я могу запустить подобный плагин просто отлично, если теги placeholder_img не присутствуют в исходном коде сайта, прежде чем вы начнете jekyll.

Итак, проблема заключается в том, что при запуске jekyll он пытается создать статические файлы до того, как сервер будет запущен, поэтому изображения в этот момент не могут быть получены FastImage.

Try начиная Джекил как этот

jekyll serve --skip-initial-build 

Это тогда, как только любой файл изменен Джекил успешно регенерировать его и служить ему.

Возможно, вам придется прикоснуться к некоторым файлам, если они были изменены, когда jekyll не был запущен, чтобы вызвать регенерацию, или просто запустить сборку jekyll после того, как сервер уже запущен.

+0

А это заставило его работать, спасибо! –

Смежные вопросы