2010-03-22 58 views
1

我完全難以理解這個問題的本質。Yaml :: load_file在開發和生產之間的行爲不同(Rails)

我們從我們的應用程序導出數據到一個'清理'YAML文件(剝離ID,created_at等)。然後我們(將)允許用戶將這些文件重新導入到應用程序中 - 這是導致完全困擾我的輸入。

在發展,YAML::load_file(params[:uploaded_data].local_path)返回YAML數組::對象的(而且並不重要的文件可以加載不同的方式數):

[#<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解析器在生產和開發之間表現如此不同?

我在軌道2.3.2上運行稀土元素1.8.7;不過我也測試過運行Ruby 1.8.6的結果。

感謝您的幫助!

回答

1

我認爲這可能是由cache_classes被設置爲true在生產和開發falseYAML::load_file方法將嘗試查找與這些對象有關的類,因爲它們尚未加載,只會將它們創建爲YAML對象。

嘗試通過調用Event首先「加載」Event類,並查看是否修復它。

+0

謝謝瑞恩,現貨!調用'Event'使開發的行爲與生產完全相同,並返回Event對象。 爲了獲得我所需的結果(我可以操作的原始Yaml對象),我將事件中導出的類標記更改並很好。 再次感謝您的幫助! – James 2010-03-22 13:23:01

相關問題