【问题标题】:Yaml::load_file acting different between development and production (Rails)Yaml::load_file 在开发和生产之间表现不同(Rails)
【发布时间】:2010-03-22 06:39:10
【问题描述】:

我完全被这个问题的本质难住了。

我们将数据从我们的应用程序导出到一个“已清理”的 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 中的对象数组 - 在这种情况下, 事件:

[#<Event title: "Start", amount: #<BigDecimal:3af2640,'0.7E2',4(8)>, repeat_type_id: 0, colour: nil,  repeat_interval: 1, exception_count: 0>, etc etc]

现在,如果它还包含关联的模型异常,这将只是令人困惑 - 但它没有。

谁能解释一下为什么 Yaml 解析器会在生产和开发之间表现如此不同?

我在 Rails 2.3.2 上,运行 REE 1.8.7;但是我也测试了运行 Ruby 1.8.6 的结果完全相同。

感谢您的帮助!

【问题讨论】:

    标签: ruby-on-rails ruby yaml


    【解决方案1】:

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

    首先通过调用Event 尝试“加载” Event 类,看看是否能解决问题。

    【讨论】:

    • 感谢瑞恩,当场!调用Event 使开发行为与生产完全相同,并返回事件对象。为了得到我需要的结果(我可以操作的原始 Yaml 对象),我从 Event 中更改了导出的类标签,一切顺利。再次感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-12
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    相关资源
    最近更新 更多