Ошибка синтаксического анализа файла yaml: значения сопоставления здесь недопустимы

90

Я хочу загрузить приложение в Google App Engine:

Я понял это

Error parsing yaml file:
mapping values are not allowed here
  in "/home/antonio/Desktop/ATI/climate-change/app.yaml", line 2, column 8 

При беге

./appcfg.py update /home/antonio/Desktop/ATI/climate-change

с этим файлом app.yaml:

application:climate-change
version: 1
runtime: python27
api_version: 1
threadsafe: true

handlers:
- url: /.*
  script: helloworld.app

строка 2, столбец 8 соответствует строке версии. Что здесь не так? Кстати, здесь я использую Ubuntu 12.04.

andandandand
источник
Убедитесь, что вы не копируете текст из Skype или какого-либо программного обеспечения. Сначала вставьте текст в текстовый редактор, а затем скопируйте оттуда. Скопировал из скайпа и видимо проблем не было. Я решил это, просто удалив, а затем повторно набрав «пробел», чтобы создать допустимые (Unix) пробелы.
Наджиб Мами,

Ответы:

111

+ Изменить

application:climate-change

к

application: climate-change

Пробел после двоеточия является обязательным в yaml, если вам нужна пара ключ-значение. (См. Http://www.yaml.org/spec/1.2/spec.html#id2759963 )

Дэйв В. Смит
источник
63

Другая причина - неправильный отступ, что означает попытку создать неправильные объекты. Я только что исправил одно в определении Kubernetes Ingress:

Неправильно

- path: / 
    backend: 
      serviceName: <service_name> 
      servicePort: <port> 

Верный

- path: /
  backend:
    serviceName: <service_name>
    servicePort: <port>
ЖК-дисплей
источник
4
Да, это тоже была моя проблема. Вот почему питон такой тупой. Пробелы НЕ должны быть важны.
Kenny Wyland
Понятия не имел, что это файл на Python. У меня было ОДНО дополнительное место. Псих. Спасибо за ответ!
Vern Jensen
4
Это НЕ файл Python. YAML и Python похожи тем, что они оба используют «несущие пробелы», чтобы уменьшить количество знаков препинания, которые в противном случае потребовались бы.
shacker 07
1
@shacker Я бы предпочел знаки препинания.
bot_bot
Да уж. Но почему-то отступы в python никогда не вызывали у меня столько проблем, как в YAML. Объект в интервале между элементами списка получает меня каждый раз. YAML действительно ужасный формат. Почему мы не можем просто использовать JSON с комментариями и запятыми в конце. Было бы намного проще.
Геллвейлер
5

Или, если проблема не в интервале, может потребоваться имя родительского каталога, а не имя файла.

Не $ dev_appserver helloapp.py
но$ dev_appserver hello/

Например:

Johns-Mac:hello john$ dev_appserver.py helloworld.py
Traceback (most recent call last):
  File "/usr/local/bin/dev_appserver.py", line 82, in <module>
    _run_file(__file__, globals())
...
  File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/api/yaml_listener.py", line 212, in _GenerateEventParameters
    raise yaml_errors.EventListenerYAMLError(e)
google.appengine.api.yaml_errors.EventListenerYAMLError: mapping values are not allowed here
  in "helloworld.py", line 3, column 39

Против

Johns-Mac:hello john$ cd ..
Johns-Mac:fbm john$ dev_appserver.py hello/
INFO     2014-09-15 11:44:27,828 api_server.py:171] Starting API server at: http://localhost:61049
INFO     2014-09-15 11:44:27,831 dispatcher.py:183] Starting module "default" running at: http://localhost:8080
Джон Ми
источник
2

Возможно, это поможет кому-то другому, но я видел эту ошибку, когда правая часть сопоставления содержит двоеточие без кавычек, например:

someKey: еще один ключ: Измените, чтобы сделать сегодня: тренируйтесь больше

должно быть

someKey: еще один ключ: «Измените, чтобы сделать сегодня: тренируйтесь больше»

Джо
источник
2

Я видел эту ошибку в ситуации, аналогичной упомянутой в ответе Джо:

description: Too high 5xx responses rate: {{ .Value }} > 0.05

У нас есть двоеточие в значении описания. Итак, проблема в отсутствии кавычек вокруг значения описания. Его можно решить, добавив кавычки:

description: 'Too high 5xx responses rate: {{ .Value }} > 0.05'
Евгений Веретенников
источник
1

Неправильно:

people:
  empId: 123
  empName: John
    empDept: IT

Верный:

people:
  emp:
    id: 123
    name: John
    dept: IT
Саджиев
источник
0

Моя проблема заключалась в отсутствии набора цитат;

Foo: bar 'baz'

должно быть

Foo: "bar 'baz'"
Грэм П. Хит
источник