14

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

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

gem 安装 github 页面

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

jekyll 服务——安全

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

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

因此,这有效,因为当--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 %}

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

4

1 回答 1

1

这确实是液体的问题。但是我无法使用 github 页面的最新液体版本 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 Liquid error: No such template 'test'\n"在这种情况下,因为我没有模板,但它调用了 include so ...)。

给出任何其他值都会'google'触发 else 情况并导致=> "\n else\n".

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

跟进

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

您能否复制您的网站并将其简化为一个最小的示例供我们使用?用给出的信息很难重现你得到的信息。

实验者须知

在控制台或从测试文件中执行 Liquid 时,请记住它喜欢将哈希值作为字符串,而不是符号。馈送{ provider: 'google' }以呈现上述结果=> ""...如果它们不是字符串,它将找不到您的键。

于 2014-05-28T06:41:55.290 回答