Помилка аналізу файлу 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.


Переконайтесь, що ви не копіюєте текст зі Skype або якогось програмного забезпечення. Вставте текст спочатку в текстовий редактор, а потім скопіюйте звідти. Я скопіював зі Skype і, очевидно, проблем не було. Я вирішив це шляхом простого видалення, а потім повторного введення пробілу для створення дійсних (Unix) пробілів.
Наджиб Мамі,

Відповіді:



63

Інша причина - неправильний відступ, що означає спробу створити неправильні об’єкти. Я щойно виправив одну у визначенні Kubernetes Ingress:

Неправильно

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

Правильно

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

4
Так, це теж була моя проблема. Ось чому python по-дурному шалений. Пробіл НЕ повинен бути важливим.
Kenny Wyland

Я навіть не підозрював, що це файл python. У мене був ОДИН додатковий простір. Божевільний Дякую за відповідь!
Vern Jensen

4
Це НЕ файл Python. YAML та Python схожі тим, що обидва використовують "несучі пробіли", щоб зменшити кількість знаків пунктуації, які б вам потрібні.
шейкер

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

Можливо, це допоможе комусь іншому, але я бачив цю помилку, коли RHS відображення містить двокрапку, не включаючи лапки, наприклад:

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.