2011-05-06 106 views
2

有谁知道为什么这个YAML进行解析,并通过我的应用程序为什么我的yaml不能正确解析?

development: 
    autocreate_indexes: false 
    allow_dynamic_fields: true 
    include_root_in_json: false 
    parameterize_keys: true 
    persist_in_safe_mode: false 
    raise_not_found_error: true 
    reconnect_time: 3 
    uri: mongodb://app:[email protected]:27076/app1 

正确读取但这YAML不是

defaults: &defaults 
    autocreate_indexes: false 
    allow_dynamic_fields: true 
    include_root_in_json: false 
    parameterize_keys: true 
    persist_in_safe_mode: false 
    raise_not_found_error: true 
    reconnect_time: 3 

development: 
    <<: *defaults 
    uri: mongodb://app:[email protected]:27076/app1 

我有这个问题的一些在过去的时代,并会删除快捷方式的语法作为解决方法,但是这次我正在处理一个大型应用程序,它在整个地方都使用这种语法,所以我不能轻松转换它。

我从来没有得到yaml解析错误,我只是稍后在调用堆栈中发现应用程序依赖的值时发现各种错误。

我的环境:

的Ubuntu 11.04

蟒蛇2.7.1+

红宝石下RVM 1.9.2-P180

让我知道如果有别的,你会需要弄清楚这一点。

UPDATE

当我删除此文件的语法速记,我得到了一个错误:

psych.rb:148:in `parse': couldn't parse YAML at line 7 column 19 (Psych::SyntaxError) 

https://gist.github.com/958472

+0

也许你不能使用同名的节点和引用('defaults:&defaults')? – Eimantas 2011-05-06 04:46:10

+0

尽管这只是一个高级配置文件。依赖宝石中有许多其他地方可以做同样的事情。 – 2011-05-06 04:49:26

+0

它看起来像我在Ruby 1.8.7中预期的那样工作。你能否把错误解析的数据结构添加到你的问题中?如果可能,请使用'pp'打印。 – 2011-05-06 05:00:14

回答

1

解决的办法是下面添加到我的开机.rb

require 'yaml' 
YAML::ENGINE.yamler= 'syck' 
0

PyYAML似乎对它进行解析罚款:

>>> yaml.load(s) 
<<< 
{'defaults': {'allow_dynamic_fields': True, 
       'autocreate_indexes': False, 
       'include_root_in_json': False, 
       'parameterize_keys': True, 
       'persist_in_safe_mode': False, 
       'raise_not_found_error': True}, 
'development': {'allow_dynamic_fields': True, 
       'autocreate_indexes': False, 
       'include_root_in_json': False, 
       'parameterize_keys': True, 
       'persist_in_safe_mode': False, 
       'raise_not_found_error': True, 
       'uri': 'mongodb://app:[email protected]:27076/app1'}, 
'e': 3} 

你没有指定/如何你加载YAML,但如果你有麻烦解析它,你可以使用PyYAML转换也许你的配置文件:

with open('converted.yaml', 'w') as f: 
    f.write(yaml.dump(yaml.load(s))) 
相关问题