Techioz Blog

Jekyll post_write で Python プラグインを呼び出す

概要

これはジキルの質問のように感じますが、単純な Ruby の質問になる可能性があります…

Ray Fong は、Python タグ ページ作成スクリプトの呼び出しを自動化する方法を説明する Jekyll ブログをホストしています - Automated Jekyll blog tags:

Jekyll::Hooks.register :posts, :post_write do
  system("python _plugins/compile_tags.py")
  • そして確かに、_plugins/compile_tags.rb にあります。 彼女がローカルでサイトを提供している間に、この Ruby コードが Python スクリプトを呼び出して、必要に応じてタグ ページを再作成すると推測します。

Ray の Ruby プラグインが想定どおりに機能すると仮定して、自分でも試してみましたが、成功しませんでした。Python スクリプトが呼び出されることはありませんでした。このように(_plugins/compile_tags.rb)、

Jekyll::Hooks.register :posts, :post_write do |post|
  puts 'post_write  was triggered in _plugins/compile_tags.rb'
  exec("python _plugins/compile_tags.py")
end
  • まだ運が悪い - メッセージもありません…

フック post_write での jekyll サービス中に Python スクリプトを呼び出すにはどうすればよいですか?

Ray Fong がいくつかのテストをするよう勧めてくれたので、「jekyll new minimum_test_site」と言い、そこにhooks.feature の最初の例を含む _plugins/test.rb を作成しました。すると、期待どおりにフックがトリガーされました (_site/foo.html を取得しました)。 「mytinypage」というテキストが含まれます)。それで、私のサイトに戻り、Gemfile で次のように元に戻しました。

 # Jekyll:
gem "github-pages", group: :jekyll_plugins  # bundle update github-pages
gem "webrick", "~> 1.7"  # instead of using Ruby v2.7.4,
 #  and still required even though  GitHub Pages  now uses  jekyll 3.9.3...

これに:

 # Jekyll:
gem "jekyll", "~> 4.3.2"

そして、「ロー!」私のフックは呼び出されますが、残念ながら、_plugins/compile_tags.rb を Jekyll フック after_reset に変更した場合でも、タグを再生成する終わりのないループが発生します。

Jekyll::Hooks.register :site, :after_reset do
  puts '- infinite loop of tag generation...'
  system("python _plugins/compile_tags.py")
end

たぶん誰かが理由を知っているでしょう…

解決策

Ruby スクリプトでシェルまたは Python スクリプト (この場合) を実行したい場合は、これを簡単に実行できます。

`/pathto/pyhton your_python_script.py`

# or

%x(/pathto/pyhton your_python_script.py)

#or 

system(/pathto/pyhton your_python_script.py)

シェルでこのコマンドを使用して「pathto」を置き換えます

which python

/Users/myusername/opt/anaconda3/bin/python # on my laptop return this

したがって、問題を参照してください。これが解決策です。

`/Users/myusername/opt/anaconda3/bin/python _plugins/compile_tags.py`

# or

%x(/Users/myusername/opt/anaconda3/bin/python _plugins/compile_tags.py)

# or 

system(/Users/myusername/opt/anaconda3/bin/python _plugins/compile_tags.py)