我完全被这个问题的性质所困扰。
我们将应用程序中的数据导出到“已清理”的YAML文件中(剥离ID,created_at等)。然后我们(将)允许用户将这些文件导回到应用程序中 - 这是完全让我烦恼的导入。
在开发过程中,YAML::load_file(params[:uploaded_data].local_path)
返回一个YAML :: Objects的数组(无论文件加载的方式有多少都无关紧要):
[#<YAML::Object:0x3c63984 @class="Event", @ivars={"attributes"=>{"exception_count"=>"0", "title"=>"Start", "amount"=>"70.00", "colour"=>nil, "repeat_type_id"=>"0", "repeat_interval"=>"1"}}>, etc etc]
这是非常好的,因为属性还包括您看到exception_count的(关联模型)异常。
然而,在生产中(rails 2.3.2,运行REE 1.8.7和1.8.6进行测试,在两个不同的生产环境上进行测试,并在本地运行生产),它返回YAML中的Objects数组 - 在这种情况下,事件:
[#<Event title: "Start", amount: #<BigDecimal:3af2640,'0.7E2',4(8)>, repeat_type_id: 0, colour: nil, repeat_interval: 1, exception_count: 0>, etc etc]
现在,如果它还包含与之关联的模型Exception,那将会令人困惑 - 但事实并非如此。
任何人都可以解释为什么Yaml解析器在生产和开发之间的行为会如此不同?
我在轨道2.3.2,运行REE 1.8.7;但是我也测试了运行Ruby 1.8.6的结果完全相同。
感谢您的帮助!
答案 0 :(得分:1)
我认为这可能是由cache_classes
在生产和开发true
中设置为false
引起的。 YAML::load_file
方法会尝试查找与这些对象有关的类,因为它们尚未加载,只会将它们创建为YAML对象。
首先尝试“加载”Event类,只需调用Event
并查看是否可以修复它。