我的基于 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 liquid
和gem list jekyll
你能复制你的网站并将其剥离成一个最小的例子供我们使用吗?很难用给出的信息重现你得到的东西。
实验者注意事项
在控制台或测试文件中执行 Liquid 时,请记住它喜欢它的哈希是字符串,而不是符号。馈送{ provider: 'google' }
以呈现上述内容会导致=> ""
...如果密钥不是字符串,它将无法找到您的密钥。