2009年3月10日火曜日

RubyのMarshalデータはバイナリだった

最近触り始めたRailsのシステムで、テストデータを変更する必要があったので調べてみると、
どうやらMarshalというものを使ってテストデータを保持しているらしい。
ファイルを開いてみた感じでは普通にテキストっぽかったので、そのままviで編集、テスト実行。

1) Error:
NoMethodError: You have a nil object when you didn't expect it!
You might have expected an instance of Array.
The error occurred while evaluating nil.[]

・・・。おかしー。どうやってもこける。。。今までこけてなかったところまで。。。
それでは試しにとsvnからテストデータのファイルを取得しなおして実行すると、成功!

うーむ、どうやらMarshalデータを直接いじったのが原因か。
ネットで調べてみるとMarshalでdumpされたデータはバイナリなので直接編集はできないようで。

だってfileコマンドで調べたら不通にASCIIテキストだって言われるんだもん。。。

$ file hoge.yml
hoge.yml: ASCII text, with very long lines

まぁともあれMarshalというものも初めて知ったので、勉強になりました。

0 件のコメント: