トップ «前の日記(2011/04/24 (日) ) 最新 次の日記(2011/04/26 (火) )» 編集 RSS feed

HsbtDiary


2011/04/25 (月) [長年日記]

[psych][ruby] psych で symbol の配列をパースできない件

padrino-0.9.23 を ruby-1.9.2p180 で動かそうとしたらどうにも Yaml で i18n の locale をロードしようとしたときに落ちてしまうのでちょっと調べてみた。

原因は padrino-core とかその他大勢で下のような yaml ファイルをロード使用とした時に psych のパースで死んでいるみたい。まずは普通に syck でパースしてみる。

>> require 'yaml'
=> true
>> ::YAML::ENGINE.yamler
=> "syck"
>> YAML.load("[:foo, :bar]")
=> [:foo, :bar]

今度は psych でやってみる。

>> ::YAML::ENGINE.yamler = 'psych'
=> "psych"
>> YAML.load("[:foo, :bar]")
Psych::SyntaxError: couldn't parse YAML at line 2 column 0

うーん、psych の挙動はよくわかってないけど、これはいいんかなあ。ひとまず syck にするとパースできるみたいなので padrino の boot.rb で

::YAML::ENGINE.yamler = 'syck'

としてお茶を濁すことにした。ひとまず padrino の locale を互換性のある形にするのは後で考えることにする。