2016-06-30 3 views
1

私は現在、レスキュー画像にCloudinaryを使用するのに役立つJekyll用のプラグインを開発しようとしています。現在のソースはin my Github repoです。それがうまくいくと、後でそれを宝石にします。Jekyllプラグインの "priority"フラグはどのように動作するはずですか?

このプラグインは、2つの特徴を有する:

  • {% cloudinary [preset] path/to/img.jpg [attr="value"] %}
  • ようoptionnalyこの液体タグに画像のための標準的な値引き/ Kramdown構文の変換を自動化するコンバータをCloudinary画像を定義するために液体タグ:![alt text](path/to/img.jpg){:caption="caption text"}{% cloudinary path/to/img.jpg alt="alt text" caption="caption text" %}となります

現在、両方の機能は意図したとおりに機能しますが、「連鎖」していません。 MarkdownでLiquidタグを使用すると評価されます。標準のMarkdownイメージを置くと、それは{% cloudinary … %} Liquidタグに変換されますが、このタグは評価されません。

私は2つの機能が正しい順序で実行されないと思われるので、Liquidタグが評価される前にコンバータが実行されていることを確認します。

しかし、私はまだpriority flagの使い方を理解していませんでした。

私はthe priority :normal line in my pluginのコメントを解除し、bundle exec jekyll serveを実行した場合、私はこのエラーを取得する:

$ bundle exec jekyll serve 
Configuration file: /Users/nhoizey/Dropbox/Personnel/Devs/nicolas-hoizey.com/_config.yml 
jekyll 3.1.6 | Error: undefined method `priority' for Jekyll::CloudinaryTag:Class 
Did you mean? print 

任意のアイデア?

EDIT(7月11日):

私は今のプラグインにに分割しています。

Converterは、自分のサイトの_pluginsフォルダ内に残っている:https://github.com/nhoizey/nicolas-hoizey.com/blob/52c92a38410e133890eea6044a033cb20344b971/_plugins/cloudinaryfy.rb#L26

ジキルは、この「優先」フラグで文句はありません。

リキッドタグは今jekyll-cloudinaryという名前の真の自律プラグインの逸品です:https://nhoizey.github.io/jekyll-cloudinary/

私はこのプラグインで「優先」フラグをつけた場合、私はまだエラーを取得:

$ bundle exec jekyll serve                     bundler: failed to load command: jekyll (/usr/local/bin/jekyll) 
Bundler::GemRequireError: There was an error while trying to load the gem 'jekyll-cloudinary'. 
Gem Load Error is: undefined method `priority' for Jekyll::Cloudinary::CloudinaryTag:Class 
Did you mean? print 
Backtrace for gem load error is: 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:5:in `<class:CloudinaryTag>' 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:4:in `<module:Cloudinary>' 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:2:in `<module:Jekyll>' 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll/cloudinary.rb:1:in `<top (required)>' 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll-cloudinary.rb:1:in `require' 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-cloudinary-1.2.2/lib/jekyll-cloudinary.rb:1:in `<top (required)>' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:86:in `require' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:86:in `block (2 levels) in require' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `each' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `block in require' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `each' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `require' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler.rb:102:in `require' 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/lib/jekyll/plugin_manager.rb:34:in `require_from_bundler' 
/usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/bin/jekyll:9:in `<top (required)>' 
/usr/local/bin/jekyll:22:in `load' 
/usr/local/bin/jekyll:22:in `<top (required)>' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:63:in `load' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:63:in `kernel_load' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli/exec.rb:24:in `run' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli.rb:304:in `exec' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor/command.rb:27:in `run' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor/invocation.rb:126:in `invoke_command' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor.rb:359:in `dispatch' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/vendor/thor/lib/thor/base.rb:440:in `start' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/cli.rb:11:in `start' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/exe/bundle:27:in `block in <top (required)>' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/friendly_errors.rb:98:in `with_friendly_errors' 
/usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/exe/bundle:19:in `<top (required)>' 
/usr/local/bin/bundle:22:in `load' 
/usr/local/bin/bundle:22:in `<main>' 
Bundler Error Backtrace: 

    /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:89:in `rescue in block (2 levels) in require' 
    /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:85:in `block (2 levels) in require' 
    /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `each' 
    /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:81:in `block in require' 
    /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `each' 
    /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler/runtime.rb:70:in `require' 
    /usr/local/lib/ruby/gems/2.3.0/gems/bundler-1.12.5/lib/bundler.rb:102:in `require' 
    /usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/lib/jekyll/plugin_manager.rb:34:in `require_from_bundler' 
    /usr/local/lib/ruby/gems/2.3.0/gems/jekyll-3.1.6/bin/jekyll:9:in `<top (required)>' 
    /usr/local/bin/jekyll:22:in `load' 
    /usr/local/bin/jekyll:22:in `<top (required)>' 

なぜそれがありますあるプラグインでは動作しますが、他のプラグインでは動作しませんか?

cloudinarifyコンバータープラグインがjekyll-cloudinary液体タグが解釈される前に実行されていることを確認するにはどうすればよいですか?

答えて

3

Jekyll::Pluginのサブクラスのためにpriorityフラグが導入されました。これは、プラグインの作者がJekyllに注文情報を明示的に与える機能を付与するためです。新しいJekyll::Siteがインスタンス化されると、プラグインサブスキャンがインスタンス化され、優先順位によってソートされます。 cloudfoundryプラグインをの前に実行する場合は、別のプラグインの後にまたはのプラグインを実行する場合、処理の点で他のプラグインの前に来るように優先度を変更します。

Jekyll::Pluginのサブクラス(Jekyll::ConverterおよびJekyll::Generatorを含む)にのみ有効です。これがコンバーターには当てはまりますが、あなたのLiquid::Tagではそうではありません - 液体タグは、競合しないため優先度の考え方がありません。例えば

カテゴリジェネレータプラグインサイトマッププラグインを持つサイトの場合を取ります。サイトマッププラグインの作者は、生成されたページがサイトマップに存在するようにしたい(すべてのコンテンツがサイトマップにある必要があります)ので、priority :lowと設定します。カテゴリジェネレータプラグインの作者は、サイトマップジェネレータなどの他のジェネレータの前に確実に実行されるようにするため、priority :highを設定します。これにより、コンパイルされたサイトマップにカテゴリページがあるように、カテゴリジェネレータプラグインがサイトマッププラグインより先に実行されます。

デフォルトの優先度は:normalです。優先順位を降順では、そこにある:

  • :highest
  • :high
  • :normal
  • :low
  • :lowest
+0

おかげで詳細な回答のためにたくさん。私の 'Liquid :: Tag'は「競合しない」ことを知ったので、**私の' Jekyll:Converter'の後に**動作させる方法はありますか?私が必要とする順序を説明しようとすると、通常のMarkdown画像構文 - ( 'Jekyll :: Converter') - >液体タグ構文 - (' Liquid :: Tag') - > HTML。私は彼らが現在他の順番で実行されているのか、それとも並行して実行されているのかはわかりません...私自身のコンバータの最後に自分自身でKramdownコンバータを呼び出さなければなりませんか?私はこれを見つけました:http://stackoverflow.com/questions/19169849/how-to-get-markdown-processed-content-in-jekyll-tag-plugin/35799486#35799486 –

+0

@NicolasHoizey液体は常に最初に動くので、あなたのタグ**あなたがレイアウトにタグを置かない限り、文書が変換される前に**実行されるべきです。プロセスは 'Jekyll :: Rendered#run'にあります:[液体はドキュメント上](https://github.com/jekyll/jekyll/blob/4b5126dda7f1e00d2701404b4f1ec2d155f40857/lib/jekyll/renderer.rb#L62)、[doc ](https://github.com/jekyll/jekyll/blob/4b5126dda7f1e00d2701404b4f1ec2d155f40857/lib/jekyll/renderer.rb#L66)、[液体のみでレイアウトを実行する](https://github.com/jekyll) /jekyll/blob/4b5126dda7f1e00d2701404b4f1ec2d155f40857/lib/jekyll/renderer.rb#L71)。 – parkr

+0

私はLiquidタグインタプリタを私のConverterで直接呼び出すようにしようと思います。私はこれらがジキルのドキュメンテーションを強化できると思う。 –

関連する問題