2013-10-23 37 views
1

有沒有辦法禁用ruby 2.0.0 YAML的後綴與紅寶石類型信息?ruby​​ to_yaml 2.0.0增加!ruby/object:哈希但YAML.load不會讀取它

我剛剛升級到紅寶石2.0.0,我有YAML問題。我讀取,更新,寫我養活到紅寶石200本,以前這個樣子

test: 
    test2: 
    somevar: hello 

YAML文件,它讀取確定,但寫道:

test: !ruby/object:Hash 
    test2: !ruby/object:Hash 
    somevar: hello 

當我重新運行該程序YAML.load什麼都不讀。

myH = YAML.load_file(YAML_FPATH) 
puts "Yaml as Hash:" + myH.inspect 
>> Yaml as Hash: {} 

奇怪的是,如果我通過了「測試:紅寶石/對象:哈希」版本的文件與紅寶石1.8.7,它會讀取文件後綴確定並寫入非後綴的文件。

+0

一個快速的完整性測試在這裏產生了預期的結果(ruby 2.0.0),例如, '''''''測試=> {:test2 => {:somevar =>「hello」}}}'和'YAML.load('test:!ruby/object:Hash')'returned'=> {「test」=> nil}'。 – struthersneil

+0

啊!如果我將你的'改變'yaml塊作爲一個文件寫入並加載它,它只能看到第一級'test:{}'。但是,我可以加載你的原始就好,並再次調用.to_yaml結果給我有效的輸出。你怎麼保存它? – struthersneil

+0

我的加載和保存代碼是: 'myH = YAML.load_file(YAML_FPATH) File.open(YAML_FPATH,'w'){| outf | outf.write = myH.to_yaml }' – ScaryGhast

回答

0

發現問題:我修改了hash.to_yaml,以便對鍵進行排序。由於我的代碼基於hash.to_yaml 1.8.7,我需要根據hash.to_yaml 2.0.0來修改它。