Yaml :: load_file在开发和生产之间起作用(Rails)

时间:2010-03-22 06:39:11

标签: ruby-on-rails ruby yaml

我完全被这个问题的性质所困扰。

我们将应用程序中的数据导出到“已清理”的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的结果完全相同。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

我认为这可能是由cache_classes在生产和开发true中设置为false引起的。 YAML::load_file方法会尝试查找与这些对象有关的类,因为它们尚未加载,只会将它们创建为YAML对象。

首先尝试“加载”Event类,只需调用Event并查看是否可以修复它。