为什么条件包含停止在 Jekyll 中工作,除非我添加非空格字符



我的基于 Jekyll 的网站突然停止包含 Google Analytics 脚本块。昨天,它正在工作(脚本块在所有页面上),但是今天,在我上传了一篇新帖子后,脚本块统一地从所有页面上消失了。

我在 GitHub 页面上托管我的网站,因此为了进行故障排除,我想在本地计算机上重现该问题。事实证明,我在本地机器上运行旧版本的 Ruby 和 Jekyll,所以我更新了 Ruby 并安装了 GitHub Pages Gem,以确保我的本地环境与 GitHub 页面匹配:

gem install github-pages

这使我能够重现该问题。现在,即使我跑步

杰基尔服务--安全

分析脚本块未包含在任何页面中。

经过多次故障排除,我终于发现,如果我在我的 JB/分析文件中放入任何类型的非空格字符,在谷歌大小写和包含指令之间,它就可以工作。

因此,这是有效的,从某种意义上说,当--safe开关打开时,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 %}

虽然我有一个解决方法,但我非常感谢对这种行为的解释。

这确实是液体的问题。但是我无法使用 github 页面当前的 liquid 版本重现它,2.5.5 ...

复制

这是我在撬动会话中尝试过的:

# 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  elsen{% endcase %}"
# Create template
t = Liquid::Template.parse c
# Render
t.render( { 'provider' => 'google' } )

无论我使用的是n行尾还是rn行尾,我都会得到预期的行为(在这种情况下=> "n Liquid error: No such template 'test'n",因为我没有模板,但它调用包含是这样......

提供除 'google' 以外的任何其他值都会触发 else 情况并导致=> "n elsen"

句点的添加仅通过包含点来影响输出,而不是是否触发包含。

随访

你能检查一下你的版本吗? gem list liquidgem list jekyll

你能复制你的网站并将其剥离成一个最小的例子供我们使用吗?很难用给出的信息重现你得到的东西。

实验者注意事项

在控制台或测试文件中执行 Liquid 时,请记住它喜欢它的哈希是字符串,而不是符号。馈送{ provider: 'google' }以呈现上述内容会导致=> ""...如果密钥不是字符串,它将无法找到您的密钥。

相关内容

最新更新