Как сериализовать объект, используя TCPServer внутри? - PullRequest
2 голосов
/ 12 января 2012

Чтобы ускорить частые повторные запуски определенного сценария в моей цепочке, я начал сериализацию на пользовательские объекты диска, которые в противном случае для создания совокупных данных занимают слишком много времени.

Использование встроенных Yaml и / илиМаршал.

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 

Однако даже при попытке сохранить в двоичном файле ошибки Маршала:

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 в конце, у меня есть возможность сохранить этот TCPServer живым и работающим после жизненного цикла моего сценария Ruby.

Любые мысли о том, как я могу уйтис этим?Я обещаю после успешной перезагрузки перепроверить валидность любых сокетов / внутренних объектов и просто заново инициализировать целый новый объект, если потребуется.

...