当我序列化活动记录时,我发现 yaml 格式因我运行的机器而异。在一个盒子上,我得到:
object: !ruby/object:User
代替
object: !ruby/ActiveRecord:User
第一个版本是一个问题,因为当 yaml 被反序列化时,主动支持需要做一些魔法来正确填充活动记录。是什么导致了这种差异,我如何确保使用第二种格式?
我正在使用 ruby 1.9.2 并且我已经强制 yaml 引擎使用 syck 使用
require "yaml"
YAML::ENGINE.yamler = "syck"
在 boot.rb(rails 应用程序)中。
更新
进一步挖掘后,我发现 ActiveRecord 类型没有在 yaml 中注册。在它工作的服务器上进行以下调用:
YAML.resolver.tags.keys
包括:
"tag:ruby.yaml.org,2002:ActiveRecord"
行为不正确的服务器缺少此类型。现在的问题是我不知道为什么没有注册该类型。