Ruby 为什么条件include会停止在Jekyll中工作,除非我添加了非空白字符?

Ruby 为什么条件include会停止在Jekyll中工作,除非我添加了非空白字符?,ruby,jekyll,liquid,github-pages,Ruby,Jekyll,Liquid,Github Pages,我的基于Jekyll的网站突然停止使用Google Analytics脚本块。昨天,它还在工作(所有页面上都有脚本块),但今天,在我上传了一篇新文章后,所有页面上的脚本块都被统一删除了 我在GitHub页面上托管我的站点,所以为了解决问题,我想在本地机器上重现这个问题。原来我在本地机器上运行的是Ruby和Jekyll的旧版本,所以我更新了Ruby并安装了,以确保本地环境与GitHub页面匹配: gem安装github页面 这使我得以重现这个问题。现在,即使在我跑步的时候 杰基尔发球——安全 分析

我的基于Jekyll的网站突然停止使用Google Analytics脚本块。昨天,它还在工作(所有页面上都有脚本块),但今天,在我上传了一篇新文章后,所有页面上的脚本块都被统一删除了

我在GitHub页面上托管我的站点,所以为了解决问题,我想在本地机器上重现这个问题。原来我在本地机器上运行的是Ruby和Jekyll的旧版本,所以我更新了Ruby并安装了,以确保本地环境与GitHub页面匹配:

gem安装github页面

这使我得以重现这个问题。现在,即使在我跑步的时候

杰基尔发球——安全

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

经过多次故障排除,我终于发现,如果我在JB/analytics文件中,在google case和include指令之间,添加任何类型的非空白字符,它都会起作用

因此,这是可行的,即当
--safe
开关打开时,
JB/analytics providers/google
中的脚本块包括:

{% case site.JB.analytics.provider %}
{% when "google" %}
  {% include JB/analytics-providers/google %}
(注意
{%when“google”%}
之后的句点字符

但是,这不起作用-即使使用
--safe
开关,
包含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  else\n{% endcase %}"

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

# Render
t.render( { 'provider' => 'google' } )
无论我使用的是
\n
还是
\r\n
行结尾,我都会得到预期的行为(
=>“\n液体错误:在这种情况下没有这样的模板“测试”\n“
,因为我没有模板,但它正在调用include so…)

给出除
'google'
以外的任何其他值都会触发else大小写并导致
=>“\n else\n”

周期的增加只会通过包含点而影响输出,而不是是否触发包含

改善效果追踪 你能检查一下你的版本吗<代码>宝石列表液体和
宝石列表杰基尔

你能复制你的网站并把它精简成一个简单的例子供我们使用吗?用所给的信息很难再现你所得到的

实验者须知
当在控制台中或从测试文件中执行Liquid时,请记住它喜欢将散列作为字符串,而不是符号。正在馈送
{provider:'google'}
以在
=>“
中呈现上述结果。。。如果你的钥匙不是字符串,它就找不到。

有趣的东西。。。看起来像液体中的虫子?你可能在Windows上吗?我遇到了各种各样的编码问题,包括
\r\n
vs
\n
。我现在使用专用的Debian VM进行发布,并使用Windows进行设计和发布。我甚至会在虚拟机上写一些帖子。是的,我在Windows上,但我很确定GitHub页面不是…迷人的。你能用一个退化的案例来创建一个显示这种行为的回购协议吗?