トラブルシューティング
Jekyllのインストールや使用に関する問題に出会ったら、ここにいくつかのヒントがあります。あなたが経験している問題が以下でカバーされていなければ、他のヘルプリソースをチェックしてください。
インストールの問題
gemのインストール時にエラーに遭遇したら、Ruby 2.x用コンパイルの拡張モジュールのヘッダファイルをインストールする必要があります。UbuntuやDebianでは次を実行します。
sudo apt-get install ruby2.6-dev
Red Hat, CentOS, そしてFedoraでは、次を実行します。
sudo yum install ruby-devel
上記をインストールしたが、 - 特にFedora 23で - 拡張機能がまだコンパイルしない場合は、おそらくredhat-rpm-config
が欠けているFedora imageを実行しているのでしょう。解決するために次を実行します。
sudo dnf install redhat-rpm-config
Arch Linuxでは次の実行が必要です。
sudo pacman -S ruby-ffi
Ubuntuでbundle exec jekyll serve
の後動けなくなり、Could not locate Gemfile
や.bundle/ directory
といったエラーが出たのでしたら、おそらく満たされていない要件があるのでしょう。最近の標準のUbuntuディストリビューションはruby
とruby-all-dev
パッケージの両方のインストールが必要です。
sudo apt-get install ruby ruby-all-dev
NearlyFreeSpeechでは、Jekyllをインストールする前に以下のコマンドを実行する必要があります。
export GEM_HOME=/home/private/gems
export GEM_PATH=/home/private/gems:/usr/local/lib/ruby/gems/1.8/
export PATH=$PATH:/home/private/gems/bin
export RB_USER_INSTALL='true'
GentooにRubyGemsをインストールするために:
sudo emerge -av dev-ruby/rubygems
Windowsでは、RubyInstaller DevKitのインストールが必要です。
Android (with Termux)では全ての必要要件を次の実行でインストールできます。
apt update && apt install libffi-dev clang ruby-dev make
macOSでは、RubyGemsのアップデートが必要かもしれません(必要な場合だけsudo
を使用します)。
gem update --system
まだ問題があるのでしたら、(gcc
のような)新しいコマンドラインツールを以下のコマンドでインストールしてください。
xcode-select --install
これにより、このコマンド(必要な場合だけsudo
を使用します)でネイティブgemsをインストールできるようになります。
gem install jekyll
macOSのアップグレードは自動でXcodeをアップグレードしません(App Storeで別途行えます)、古いXcode.appは上記でダウンロードしたコマンドラインツールを妨害する恐れがあります。この問題に直面している場合は、Xcodeをアップグレードし、アップグレードされたコマンドラインツールをインストールしてください。
Non-SuperuserとしてJekyllを実行する (no sudo!)
Linux、macOS、およびWindows上のUbuntuのBashのほとんどのフレーバーでは、次の行を.bashrc
ファイルの末尾に追加することで、Jekyllをnon-superuserとして実行し、システム全体の場所にgemをインストールする必要はありません。
# Ruby exports
export GEM_HOME=$HOME/gems
export PATH=$HOME/gems/bin:$PATH
これは、gem
の場所をシステム全体の場所ではなく、ユーザーのホームフォルダのgemsにし、システム全体のパスよりもユーザーのPATH
にlocal jekyllコマンドを追加します。
これは、ユーザーアカウントの権限が限られている多くの共有Webホスティングサービスにも役立ちます。gem install jekyll bundler
を実行する前に、これらのexportを.bashrc
に追加すると、Jekyllを完全にnon-sudo
でインストールできます。
新しいexportを有効にするには、Bashを閉じ再起動するか、shellアカウントからログアウトしてログインしなおすか、実行中のshellで. .bashrc
を実行します。
jekyll new
コマンドで以下のようなエラーを見た場合は、上記の手順で解決することができます。
jekyll new test
Running bundle install in /home/user/test...
Your user account is not allowed to install to the system RubyGems.
You can cancel this installation and run:
bundle install --path vendor/bundle
to install the gems into ./vendor/bundle/, or you can enter your password
and install the bundled gems to RubyGems using sudo.
Password:
一度これを行えば、jekyll new
はあなたのユーザーアカウントで適切に動作するはずです。
Jekyll & macOS
v10.11でのSystem Integrity Protectionの導入により、以前は書き込み可能だったいくつかのディレクトリがシステムの場所と見なされ、使用できなくなりました。これらの変更を受け、起動して実行するにはいくつかの簡単な方法があります。1つの選択肢は、gemがインストールされる場所を変更することです(ここでも、必要な場合にのみsudo
を使用します)。
gem install -n /usr/local/bin jekyll
あるいは、HomebrewをインストールしてRubyのセットアップに使用することもできます。これは次のようにして行うことができます。
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
Homebrewをインストールしたら、2番目のステップで実行します。
brew install ruby
(より複雑なニーズを持っている)上級ユーザーはJekyllをインストールするために、多くのRubyバージョンマネージャ(RVM, rbenv, chruby, etc.)のうちの1つを選ぶのが役に立つかもしれません。
Rubyのインストールに上記の方法のいずれかを使用することを選択した場合は、次のコマンドを使用して$PATH
変数を変更する必要がある場合があります。
export PATH=/usr/local/bin:$PATH
GUI appsは以下で$PATH
を修正できます。
launchctl setenv PATH "/usr/local/bin:$PATH"
SIPが有効になっているシステムでは/usr/local
が「安全な」場所と見なされ、Appleが提供するRubyのバージョンとの潜在的な競合を回避し、Jekyllとその依存関係をサンドボックス環境に保ちます。gemを追加または削除するときにsudo
を必要としないという利点もあります。
JavaScriptランタイムが見つけられない。(ExecJS::RuntimeUnavailable)
適切なJavaScriptランタイムがない場合、jekyll-coffeescript
のインストール中にこのエラーが発生する可能性があります。これを解決するには、execjs
とtherubyracer
gemsをインストールするか、nodejs
をインストールしてください。 詳細はissue #2327をご覧ください。
Jekyll実行の問題
DebianやUbuntuでは、jekyll
実行ファイルをターミナルで利用できるようにするために、パスに/var/lib/gems/1.8/bin/
を追加する必要があります。
Base-URLの問題
jekyll serve --baseurl '/blog'
上記のようにbase-urlオプションを使用している場合、サイトへのアクセスは以下を使用します。
http://localhost:4000/blog/index.html
以下では上手く機能しません。
http://localhost:4000/blog
設定の問題
構成・設定で矛盾がある場合の優先順位は以下の通りです。
- コマンドラインのflags
- 設定ファイルの設定
- デフォルト
これは、デフォルトは_config.yml
のオプション設定で上書きされ、コマンドラインのflagsは他の設定を上書きするを意味しています。
注:v3.3.0以降、Jekyllはデフォルトでnode_modules
とvendor
内の特定のサブディレクトリを処理しません。ただし、設定ファイルで明示的にexclude:
arrayを定義すると、このデフォルト設定が上書きされるため、一部のユーザーはサイトの構築時にエラーが発生し、次のエラーメッセージが表示されます。
ERROR: YOUR SITE COULD NOT BE BUILT:
------------------------------------
Invalid date '<%= Time.now.strftime('%Y-%m-%d %H:%M:%S %z') %>':
Document 'vendor/bundle/gems/jekyll-3.4.3/lib/site_template/_posts/0000-00-00-welcome-to-jekyll.markdown.erb'
does not have a valid date in front matter.
vendor/bundle
をexclude:
リストに追加することでこの問題は解決されますが、/vendor/
(および/node_modules/
下のサブディレクトリ)の下に他のサブディレクトリも宛先フォルダー_site
に処理されることになります。
適切な解決策は、完全に上書きするのではなく、exclude:
のデフォルト設定を組み込むことです:
v3.4.3
以降のバージョンでは、exclude:
設定は以下のようになります。
exclude:
- Gemfile
- Gemfile.lock
- node_modules
- vendor/bundle/
- vendor/cache/
- vendor/gems/
- vendor/ruby/
- any_additional_item # any user-specific listing goes at the end
v3.5
以降では、Gemfile
とGemfile.lock
もデフォルトで除外されています。そのため、ほとんどの場合、設定ファイルに別のexclude:
arrayを定義する必要はありません。そのため、既存の定義を上記のように変更するか、完全に削除するか、コメントアウトして簡単に編集できるようにすることができます。
マークアップの問題
Jekyllが使用している複数のマークアップエンジンにはいくつか問題があります。このページは同じ問題に直面している方への助けとなるでしょう。
Liquid
Liquidバージョン2.0はテンプレートでの{{
の使用が壊れています。以前のバージョンとは異なり、2.0で{{
の使用は以下のエラーを発生させます。
'{{' was not properly terminated with regexp: /\}\}/ (Liquid::SyntaxError)
Excerpts(抜粋)
v1.0.0以降、Jekyllは自動的にポストの抜粋を生成しています。v1.1.0以降、Jekyllはこれらの抜粋をLiquidに渡していますが、参照が存在しない場合やタグが閉じられていない場合に、奇妙なエラーを引き起こす可能性があります。これらのエラーが発生した場合は、_config.yml
にexcerpt_separator: ""
を設定するか、または無意味な文字列を設定してください。
productionの問題
v3.2.0以降のビルド中にproduction環境で静的ファイルが見つからないという問題が発生した場合は、environmentをproduction
に設定する必要があります。この問題は、存在しないシンボリックリンクをコピーしようとしたことが原因です。
遭遇した問題を報告してください!
バグに遭遇した場合は、GitHubで問題とその回避策を説明したissueを作成してください。そうすればここで他の人のために文書化することができます。