Почему мой yaml не анализируется правильно? - PullRequest
2 голосов
/ 06 мая 2011

Кто-нибудь знает, почему этот 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:app@flame.mongohq.com: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:app@flame.mongohq.com:27076/app1

У меня была эта проблема несколько раз вв прошлом и удалил бы синтаксис ярлыка как обходной путь, но на этот раз я работаю с большим приложением, и он использует этот синтаксис повсеместно, поэтому я не могу его легко преобразовать.

Я никогда не получаюошибка разбора yaml, я просто позже получаю различные ошибки в стеке вызовов, когда значения, от которых зависит приложение, не найдены.

Моя среда:

ubuntu 11.04

python 2.7.1 +

ruby ​​1.9.2-p180 под rvm

Дайте мне знать, если вам что-то еще понадобится, чтобы выяснить это.

ОБНОВЛЕНИЕ

Когда я удаляю сокращенный синтаксис для этого файла, я получаю следующую ошибку:

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

https://gist.github.com/958472

Ответы [ 2 ]

1 голос
/ 06 мая 2011

Решением было добавить следующее в мой boot.rb

require 'yaml'
YAML::ENGINE.yamler= 'syck'
0 голосов
/ 06 мая 2011

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:app@flame.mongohq.com:27076/app1'},
 'e': 3}

Вы не указали, куда / как вы загружали yaml, но если у вас возникли проблемы с его анализом, вы можете конвертировать файлы конфигурации с помощью PyYAML:

with open('converted.yaml', 'w') as f:
    f.write(yaml.dump(yaml.load(s)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...