大分blogの更新をサボっていましたが、GWでちょっと時間ができたので、Octopressを3.0にアップデートしました。最初に構築した際の事もあまり覚えてなかったので、アップデート作業の内容と課題を書いておきます。

Docker

元々Octopress用のDockerコンテナを作っていて、そこでblogの更新をできるようにしていたので、今回のアップデート作業で失敗しても良いように一旦commitしてイメージを作ってから始めました。アップデートに失敗しても環境が壊れる心配をしなくて良いのが嬉しい。

Ruby

Travis CIのoctopressのページを見ると、Rubyのバージョンは2.0.0と1.9.3でテストしており、どちらも特に問題がないのでRubyのバージョンを1.9.3 => 2.0.0にアップしました。また、このコンテナにはRubyをパッケージインストールしていたのですが、rbenvに変更しています。

Update Octopresss

Octopressのupdateはオフィシャルなやり方が以下のページに載っているので、それをそのまま実行しています。

Issues

updateする時に嵌ったことをいくつか。

Liquid Exception

Liquid Exception: Variable '(content)' was not properly terminated with regexp /\\}\\}

今回はこのエラーで大分手間取りました。既存のページのcode block内にブレース・ブレイス(波括弧)の開始の方を2つ連続で記載すると、このエラーが発生します。update前はwarningが出てるだけだったのですが、update後はエラーになってrake generateが中断します。

この問題の対応に関しては、以下のページが参考になりました。

しかし、エスケープやrawタグを用いても、一旦コードブロックをHTMLに変換した後にまたこのエラーが出てしまい回避できませんでした。また、幅なしスペース(​)も効果が無く、今回は諦めて別の文字に置き換えました。

Error: Pygments can’t parse unknown language: </p>.

これもupdate前は問題なかったのですが、コードブロック内に空行があると、そこでHTMLのpタグ等が入ってしまい、rake generateが失敗してしまいます。これはコードブロック内の空行の先頭にスペースを入れて回避しました。全てのコードブロックでNGになったわけではない気もします。

Theme

minimizedといテーマを使っているのですが、ヘッダ下の部分だけdefaultテーマのようになってしまったのでrake install minimizedを実行して再度テーマを設定し直しました。

Line number

これは以前対応したのですが、今回のupdateで元に戻ってしまったようです。update前に使っていたoctopressから、以下のページにある対応が入ったsass/custom/_styles.cssを持ってきて上書きしました。

また、テーマを設定しなおした際にフォントの設定も戻ってしまったので、sass/custom/_fonts.cssも同じ方法で更新しました。

Post dates are not rendering

update後、タイトルの上にでる更新日付が表示されなくなってしまいました。以下で取り上げられてます。

source/_includes/post/date.htmlをgithub上の最新の内容に差し替えてみたところ、更新日付が表示されるようになりました。

Conclusion

Liquid Exceptionの件で一旦はupdateを諦め、Hugoへの移行も検討しましたが、コードブロックを行番号付きで表示する方法を見つけられなかったので、今回は諦めました。しかしページの生成は本当に速かったので、次はHugoに乗り換えるかも。何より、次にOctopressの更新をうまくできる気がしない…