我的基于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 %}
虽然我有一个解决方法,但我非常感谢这种行为的解释。
答案 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 liquid
和gem list jekyll
您是否可以复制自己的网站并将其拆分为最小的示例供我们玩?用给出的信息重现你得到的东西是很困难的。
在控制台或测试文件中执行Liquid时,请记住它喜欢它的哈希是字符串,而不是符号。在{ provider: 'google' }
中提供=> ""
以呈现上述结果...如果您的密钥不是字符串,则无法找到您的密钥。