Octopress - Yaml で Psych エラー!
Updated:
Ruby 製静的ブログシステム Octopress でジェネレート( rake generate
)時、Psych 関連のエラーが発生することがあります。
(ただし、一口に Psych エラーと言っても、エラーの原因は環境により異なるので、エラーメッセージをよく確認すること)
以下、原因と対策についてのメモです。
0. 前提条件
- Linux Mint 14 Nadia(64bit) を使用。
- Octopress 2.0.0 を使用。
- Octopress で使用する Ruby(rbenv インストール) は 1.9.3-p194 である。
1. 現象
Octopress をジェネレートする際に発生するエラーは以下のとおり。
今回問題になるのは7行目以降。
$ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
Configuration from /home/foo/octopress/_config.yml
/home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/blankslate-3.1.2/lib/blankslate.rb:51: warning: undefining `object_id' may cause serious problems
Building site: source -> public/octopress
/home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/psych.rb:203:in `parse': (<unknown>): found unexpected end of stream while scanning a quoted scalar at line 3 column 8 (Psych::SyntaxError)
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/psych.rb:203:in `parse_stream'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/psych.rb:151:in `parse'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/1.9.1/psych.rb:127:in `load'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/convertible.rb:33:in `read_yaml'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/post.rb:39:in `initialize'
from /home/foo/octopress/plugins/preview_unpublished.rb:23:in `new'
from /home/foo/octopress/plugins/preview_unpublished.rb:23:in `block in read_posts'
from /home/foo/octopress/plugins/preview_unpublished.rb:21:in `each'
from /home/foo/octopress/plugins/preview_unpublished.rb:21:in `read_posts'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:128:in `read_directories'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:98:in `read'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/lib/jekyll/site.rb:38:in `process'
from /home/foo/.rbenv/versions/1.9.3-p194/lib/ruby/gems/1.9.1/gems/jekyll-0.11.2/bin/jekyll:250:in `<top (required)>'
from /home/foo/.rbenv/versions/1.9.3-p194/bin/jekyll:23:in `load'
from /home/foo/.rbenv/versions/1.9.3-p194/bin/jekyll:23:in `<main>'
2. 原因
最初は何のことかピンと来ないが、エラー内容をよく読むと “quoted scalar” 読込中の(しかも、3行目8桁目での)エラーであることがすぐに分かる。
実際、記事ファイル(Markdown ファイル)を確認してみると、Yaml 部分が以下のようになっていた。
---
layout : single
title : "Linux - cron で時報を鳴らす!
published: false
date : 2013-05-08 00:20:00 +0900
comments : true
categories:
- サーバ構築
tags:
- Linux
---
:
:
「記事タイトルの文字列を囲うダブルクォーテーションが対になっていなかった!」
3. 対策
当然、以下のいずれかの対応をとればよい。
- 記事タイトルの文字列を囲うダブルクォーテーションを対にする。
- 記事タイトルの文字列を囲うダブルクォーテーションを削除する。
当方は、いつもダブルクォーテーションで囲うようにしているので、前者の対応をとった。
4. その他
記事が大量にある場合、どの記事でエラーがで発生しているのか即座に判断できない。
しかし、昨日は正常で今日はエラーとなれば、今日追加した記事に不具合があることくらいは想像がつくだろう。
Octopress でブログを書くようになって約半年ですが、初めて遭遇したエラーでした。
今後、同じようなエラーで慌てないように記録しておいた次第です。
以上。
Comments