Почему условные включают прекращение работы в Jekyll, если я не добавлю небелые пробелы?

Мой сайт, основанный на Jekyll, внезапно остановился, включая блок Google Analytics script. Вчера он работал (блок script был на всех страницах), но сегодня, после того как я загрузил новое сообщение, блок script был равномерно удален со всех страниц.

Я размещаю свой сайт на страницах GitHub, поэтому для устранения неполадок я хотел воспроизвести проблему на своей локальной машине. Оказалось, что я запускал старые версии Ruby и Jekyll на своей локальной машине, поэтому я обновил Ruby и установил GitHub Pages Gem, чтобы обеспечить, чтобы моя локальная среда согласованные страницы GitHub:

gem install github-pages

Это позволило мне воспроизвести проблему. Теперь, даже когда я бежал

jekyll serve --safe

блок Analytics script не был включен ни на одну страницу.

После значительного устранения неполадок я, наконец, понял, что если я помещу символ небелого пробела в файл JB/analytics, между аргументом google и директивой include, он работал.

Таким образом, работает, в том смысле, что когда переключатель --safe включен, блок script в JB/analytics-providers/google включен:

{% case site.JB.analytics.provider %}
{% when "google" %}.
  {% include JB/analytics-providers/google %}

(обратите внимание на символ периода после {% when "google" %}).

Однако это не работает - даже с помощью переключателя --safe содержимое include JB/analytics-providers/google никогда не включается:

{% case site.JB.analytics.provider %}
{% when "google" %}
  {% include JB/analytics-providers/google %}

В то время как у меня есть обходной путь, я очень благодарен за объяснение этого поведения.

Ответы

Ответ 1

Это действительно проблема с жидкостью. Но я не могу воспроизвести его с версией жидкости, текущей для github-страниц, 2.5.5...

воспроизводящего

Это то, что я пробовал в сеансе pry:

# Load liquid 2.5.5
require 'liquid'

# Set up local file system to allow for includes
Liquid::Template.file_system = Liquid::LocalFileSystem.new( './' )

# Create template string
c = "{% case provider %}\n  {% when 'google' %}\n    {% include 'test' %}\n{% else %}\n  else\n{% endcase %}"

# Create template
t = Liquid::Template.parse c

# Render
t.render( { 'provider' => 'google' } )

Независимо от того, использовал ли строки окончание строки \n или \r\n, я получаю ожидаемое поведение (=> "\n Liquid error: No such template 'test'\n" в этом случае, так как у меня не было шаблона, но он вызывает include так...).

Предоставление любого другого значения, чем 'google', вызывает событие else и приводит к => "\n else\n".

Добавление периода влияет только на результат, включая точку, а не если оно вызывает включение или нет.

Followup

Не могли бы вы проверить свои версии? gem list liquid и gem list jekyll

Не могли бы вы скопировать свой сайт и разделить его на минимальный пример для нас? Трудно воспроизвести то, что вы получили с предоставленной информацией.

Примечание для экспериментаторов

При выполнении Liquid в консоли или из тестового файла помните, что ему нравится, что хеши являются строками, а не символами. Подача { provider: 'google' } для вывода результатов в => ""... Она не найдет ваши ключи, если они не являются строками.