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)