(興味が無い人には意味のわからない内容となっています。)
『すうじあむ』のある特定の非常に重たい検索処理で、
頻繁な検索実行を抑える為に検索結果をファイルとして保存し
キャッシュしておくような処理がある。
ファイルの保存にはRubyのYAMLモジュールを使って、
ActiveRecordオブジェクトリスト(検索結果リスト)を
yaml形式に変換して保存している。
コードに直すとこう。
list = ActiveRecord.find(:all, 〜検索処理〜)
path = "保存するファイル名"
File.open(path,'w') {|f| f.puts list.to_yaml }
これでActiveRecordオブジェクトの情報も保持して保存してくれるので、
復元が非常に楽チンだ。
ところがこのファイルを読み込んでリストに戻す時に注意が必要。
Railsをdevelopment環境で実行時にのみ元のオブジェクトに戻らず、
YAMLオブジェクトのリストとなってしまう。
どうやらdevelopment環境では毎回クラスをロードしているので、
YAML.loadを実行する時に対象のActiveRecordクラスが見えていないよう。
loadを行う前にそのクラスをロードする処理を入れてやれば、
問題なく復元されるようになった。
loadはYAML.loadの手前にクラスをこんな感じに書いてやるだけで良い。
Examination # ExaminationというActiveRecordクラスに復元したい
path = "保存するファイル名"
list = YAML.load(File.read path)
test,production環境では起動時にだけクラスをロードするので、
サーバ起動中に一回でもロード済みなら問題ないようだ。
※『すうじあむ』はRuby On Railsを利用しています。
※Railsのバージョンは2.0.2でRubyのバージョンは1.8.6を使用。