2011-05-06 4 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 구문 분석 오류가 발생하지 않습니다. 응용 프로그램에 따라 값을 찾을 수없는 경우 나중에 호출 스택에서 다양한 오류가 발생합니다.

내 환경 :

우분투 11.04

파이썬

가 거기에 아무것도 당신이 할 경우 알려줘 RVM에서 2.7.1+

루비 1.9.2-P180 이것을 알아낼 필요가있다.

UPDATE는

I이 파일에 약식 구문을 제거 할 때, 다음 오류 얻을 :

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

+0

이것은 하나의 하이 레벨 설정 파일입니다. 같은 일을하는 의존적 인 보석에는 많은 다른 장소들이 있습니다. –

+0

Ruby 1.8.7에서 예상대로 작동하는 것으로 보입니다. 질문에 잘못 파싱 된 데이터 구조를 추가 할 수 있습니까? 가능한 경우 'pp'를 사용하여 인쇄하십시오. –

답변

1

이 솔루션은 내 부팅에 다음을 추가했다 : 당신은 YAML를로드 한 방법,하지만 당신은 아마도 PyYAML를 사용하여 설정 파일을 변환 할 수 있습니다 그것을 구문 분석하는 데 문제가있는 경우/어디당신은 지정하지 않은 .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} 
with open('converted.yaml', 'w') as f: 
    f.write(yaml.dump(yaml.load(s))) 
관련 문제