Github-pagesでPage build failureにハマった件。またはLiquid Exception: invalid byte sequence in UTF-8になった件。
Githubからの通知の確認
Github-pagesのリポジトリへpushすると以下のような文面のメールが届きます。
Subject: Page build failure
The page build failed with the following error:
page build failed
For information on troubleshooting Jekyll see https://help.github.com/articles/using-jekyll-with-pages#troubleshooting
If you have any questions please contact GitHub Support.
support@github.com
https://github.com/contact
通知してくれるのはいいんですが、情報量が少ない。。せめてビルド時のエラーログなりを送ってほしい。。。
Githubのヘルプページの確認
ひとまず、メールに記載されていたURLのページを確認します。
Troubleshootingに記載されている要旨は、「ローカルでビルドして、パースエラーを見つけなさい」とのこと。
ローカル環境でビルド
GitHubで使っているJekyllとその依存関係のバージョンについては、the same versions of Jekyll and other dependencies that we useに記載されていて、この時点では以下のバージョンになっていた。
s.rubygems_version = "1.8.0"
s.required_ruby_version = "~> 1.9.3"
~~~
# Jekyll and related dependency versions as used by GitHub Pages.
# For more information see:
# https://help.github.com/articles/using-jekyll-with-pages
s.add_dependency("RedCloth", "= 4.2.9")
s.add_dependency("jekyll", "= 1.1.2")
s.add_dependency("kramdown", "= 1.0.2")
s.add_dependency("liquid", "= 2.5.1")
s.add_dependency("maruku", "= 0.6.1")
s.add_dependency("rdiscount", "= 1.6.8")
s.add_dependency("redcarpet", "= 2.2.2")
ローカルの環境を上記のバージョンに合わせてビルドしてみると、いくつかErrorが。
エラーの原因は、
- _postの記事に書かれていたサンプルコードがmarkdownのリンク表記とかぶっていたため、不正なリンクとして解釈されていた
- URLにマルチバイト文字を含むためエラーになった こと
上記の箇所を修正してローカル環境でビルドしてもエラーや警告が出ないことを確認し、GitHubに再度pushしても、同じくPage build failureとなってしまった。
ひとまずバージョン依存での問題ではなさそうということはわかった。
Pages don’t build: “Unable to run Jekyll”の確認
GitHubのヘルプには、Troubleshootingの手順で確認してもビルドに失敗したら、Page doesn’t build guideを確認するようにと記載されていた。
このPage does’nt build guideの内容は以下
Unsafe plugins
危ないプラグインは使うなよ、ということらしいけど、debug.rbしか入っていないから、これが原因ではなさそう。
Syntax errors
sourceファイルのタイポかその辺のエラーじゃないか、ってことらしい。jekyllのsafeオプションを付けてビルドしてみる。以下のコマンドを実行
jekyll build --safe
これも問題なし。
Source setting
GitHubのビルドサーバーでは、sourceセッティングをオーバーライドするらしく、sourceの設定を弄っていると正しくビルドされないらしい。
sourceセッティングは変更していないので、これも原因ではなさそう。
Submodules in Pages
リポジトリでサブモジュールを使っている場合、ビルド時に自動でそのサブモジュールをpullするらしい。 この時、サブモジュールのアクセス先がpublicではなくprivateだとアクセスできずに失敗するらしい。
サブモジュールは使っていないので、これも原因ではなさそう。
Viewing build error messages
ビルドのエラーログを確認しろ、とのこと。
ローカル環境でビルドする以外の方法として、Travis CIを使ってビルドエラーメッセージを確認することができるらしい。
手順は以下
- Gemfileを準備 リポジトリのルート直下に、ファイル名”Gemfile”で以下の内容を記述する。
- .travis.ymlの準備 テストサービスの設定に、ファイル名”.travis.yml”で以下の内容を記述する。
この状態でGitHubへpushするとTravic CIでビルドジョブが実行される、らしい。
Travis CIのビルドメッセージを確認
Travis CIの画面から、以下のビルドメッセージを確認すると
どうやらpost.htmlのパースでエラーになっているらしい。
Liquid Exceptionの確認
markdownパーサー
Liquid Exception: invalid byte sequence in UTF-8
で、ググってみると
Github Pages で page build failed エラー|いがいが日記 Liquid Exception: Invalid Byte Sequence in UTF-8 in atom.xml|T.I.D.
markdownパーサーによってはビルドエラーになる場合があるらしい。 markdownパーサーを、”redcarpet”、”kramdown”、”rdiscount”と変えて試してみた結果、どのmarkdownパーサーでも同じくビルド失敗。
markdownパーサー依存の問題ではなさそう。
詳細なエラー発生箇所の確認
エラー発生箇所をもっと詳細に特定するために、post.htmlの中身を削ってビルド・エラーメッセージの確認を行う。 どうやら_includes/helpers/reference_thumbnail.htmlを使っている箇所が原因のよう。
解決
上記のファイルをエディタで開いてみると、文字コードがSHIFT_JISとなっていた。
これをUTF-8に変換してビルドしてみると、成功。
調べてみれば、なんてことない初歩的な問題でした。。
Latest post:
- OpenWhiskのScala sbtプロジェクトのgiter8テンプレートを作った
- OpenWhisk+Scalaで作るServerless Architectureとっかかり
- BluemixにPlayframeworkアプリケーションをデプロイする
- sbt、Giter8を統合するってよ
- Scala 2.12.0でSAM型