2017-05-10 10 views
0

私はなど、特定のlayoutのページが自分のYAMLが検証されますようにビルドが特定のフィールドが不足している場合erroringで、ジキルのサイトにロジックを構築、または値の間違った型を持っていると思いYAMLフィールドが指定されていない場合、Jekyllビルド中に例外を発生させますか?

一つの回避策は、単にエラー・メッセージを取得し、例外を発生させ、液体フィルタの場しのぎのプラグインを書き込むことによるものである。

{% unless page.necessary_field %} 
    {{ "You're missing necessary_field" | raise_error }} 
{% endunless %} 

module Jekyll 
    module ExceptionFilter 
    def raise_error(msg) 
     bad_file = @context.registers[:page]['path'] 
     err_msg = "On #{bad_file}: #{msg}" 
     raise err_msg 
    end 
    end 
end 

Liquid::Template.register_filter(Jekyll::ExceptionFilter) 

を次に、テンプレート内に、例えば、私はこれを含むことができ

この種のジョブは完了です。

私が持っている1つの問題は、1つのエラーを見つけたらすぐにビルドプロセスが停止することです。私はリポジトリ内のすべての.mdファイルをまたいだビルドを続け、最後に表示するすべてのページにわたるエラーのリストを収集したいと考えています。 Based on the Jekyll docsの場合はliquid: error_mode: warn_config.ymlがあると思いますが、そうはありません。

答えて

2

ジェネレータを使用してビルド前にすべてのファイルをチェックすることができます。 、このコードはテストされていない:)

それは、すべてのページ、特定のプロパティをチェックして歩くでしょう

module MyModule 

    class WarningGenerator < Jekyll::Generator 
    def generate(site) 

     errors = Array.new 

     site.posts.docs.each do |p| 
     unless p.data['my_property'].any? { 
      errors = "On #{p.title}: My Property is missing" 

     } 
     end 

     errors.each do |error| 
     puts error 
     end 

     raise "There were errors" 
    end 
    end 
end 

注意それはだ場合は、配列にメッセージを追加します。ここではあなたがそれを行うことができる方法であります後でエラーが発生します。

+0

はい、ジェネレータは、最終的に例外を発生させる前にすべてのページを繰り返し処理できるので、より意味があります。 – mdlincoln

+0

テンプレート/液体フィルターソリューションで得られる利点の1つは、液体マークアップによってロジックを定義できることです。このサイトは数多くの貢献者によって編集されていますが、必要に応じてロジックを維持したり変更するのに十分な液体マークアップを理解していますが、ルビーで書かれたエクステンション内でルールを入れたり変更したりするのは自信がありません。 – mdlincoln

+1

もちろん。それはすべて依存します:-) – Christian

関連する問題