2

チェーン内の特定のスクリプトの頻繁に繰り返される実行を高速化するために、カスタム オブジェクトをディスクにシリアル化し始めました。

組み込みの Yaml や Marshal を使用します。

Yaml は正常に見えるテキスト ファイルに正常にシリアル化しますが、逆シリアル化しようとすると次のエラーが発生します。

b2 = YAML::load(File.open("browserObj.yaml", 'r'))
Syck::TypeError: Invalid Regular expression: "/\\A\\s*\n        ([a-zA-Z][-+.a-zA-Z\\d]*):          ...and many more strange lines 

ただし、Marshal エラーを介してバイナリ ファイルに保存しようとしても、次のようになります。

puts File.open("browserObj.bin", 'w').write Marshal::dump($browser)  
TypeError: can't dump TCPServer

# Marshal::dump($browser, File.open("browserObj.bin", 'wb'))  # same error

意図的$browser.closeに最後に行わないことで、Ruby スクリプトの有効期間が終了した後も、この TCPServer を存続させて実行し続けることができます。

どうすればこれを回避できるかについて何か考えはありますか? リロードが成功したら、ソケット/内部オブジェクトの有効性を再確認し、必要に応じてまったく新しいオブジェクトを再初期化することを約束します。

4

0 に答える 0