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

时间:2013-09-12 16:00:49

标签: ruby jekyll liquid github-pages

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

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

  

gem install github-pages

这使我能够重现这个问题。现在,即使我跑了

  

jekyll serve --safe

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

很多故障排除之后,我终于想通了如果我在我的JB /分析文件中放置任何非空格字符,那么< em> google 案例和include指令,它有效。

因此,可行,因为当--safe开关打开时,JB/analytics-providers/google中的脚本块包含 :< / p>

{% 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 个答案:

答案 0 :(得分: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",因为我没有模板,但它是&#39 ; s调用包含所以......)。

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

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

跟进

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

您是否可以复制自己的网站并将其拆分为最小的示例供我们玩?用给出的信息重现你得到的东西是很困难的。

实验者注意事项

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