14

私の Jekyll ベースの Web サイトが突然、Google Analytics スクリプト ブロックを含めなくなりました。昨日は機能していました (スクリプト ブロックはすべてのページにありました) が、今日、新しい投稿をアップロードした後、スクリプト ブロックはすべてのページから一様に消えていました。

私は自分のサイトを GitHub ページでホストしているので、トラブルシューティングを行うために、ローカル マシンで問題を再現したいと考えていました。ローカル マシンで古いバージョンの Ruby と Jekyll を実行していたことが判明したため、Ruby を更新し、GitHub Pages Gemをインストールして、ローカル環境が GitHub ページと一致するようにしました。

gem install github-pages

これにより、問題を再現できました。今、走った時も

jekyll serve --safe

Analytics スクリプト ブロックがどのページにも含まれていませんでした。

トラブルシューティングを重ね結果、JB/analytics ファイルのgoogle case と include ディレクティブの間に何らかの種類の空白以外の文字を入れると、うまくいくことがわかりました。

したがって、スイッチがオンのときにスクリプト ブロックが含まれるという意味で、これは機能します。--safeJB/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"この場合、テンプレートがなかったので、インクルードを呼び出しています...)。

以外の値を'google'指定すると、else ケースがトリガーされ、結果は=> "\n else\n".

ピリオドの追加は、インクルードをトリガーするかどうかではなく、ドットを含めることによってのみ出力に影響します。

ファローアップ

バージョンを確認できますか?gem list liquidgem list jekyll

あなたのサイトをコピーして、私たちが遊ぶための最小限の例にそれを取り除いていただけませんか? 与えられた情報で得たものを再現することは困難です。

実験者への注意

コンソールまたはテスト ファイルから Liquid を実行する場合、ハッシュはシンボルではなく文字列であることが望ましいことに注意してください。{ provider: 'google' }上記の結果をレンダリングするためにフィードすると...=> ""キーが文字列でない場合、キーが見つかりません。

于 2014-05-28T06:41:55.290 に答える