Błąd podczas analizowania pliku yaml: wartości mapowania są tutaj niedozwolone


90

Chcę przesłać aplikację do Google App Engine:

rozumiem

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

Podczas biegania

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

z tym plikiem app.yaml:

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

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

wiersz 2, kolumna 8 odpowiada wierszowi wersji. Co tu jest nie tak? Przy okazji, używam tutaj Ubuntu 12.04.


Upewnij się, że nie kopiujesz tekstu ze Skype lub innego oprogramowania. Wklej tekst najpierw do edytora tekstu, a następnie skopiuj stamtąd. Skopiowałem ze Skype'a i widocznie nie było żadnych problemów. Rozwiązałem to, po prostu usuwając, a następnie przepisując „spację”, aby utworzyć prawidłowe (uniksowe) przestrzenie.
Nadjib Mami

Odpowiedzi:



63

Inną przyczyną jest niewłaściwe wcięcie, które oznacza próbę stworzenia niewłaściwych obiektów. Właśnie naprawiłem jeden w definicji Kubernetes Ingress:

Źle

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

Poprawny

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

4
Tak, to też był mój problem. Dlatego Python jest cholernie głupi. Białe znaki NIE powinny być ważne.
Kenny Wyland

Nie miałem pojęcia, że ​​to plik Pythona. Miałem JEDNĄ dodatkową przestrzeń. Zwariowany. Dziękuję za Twoją odpowiedź!
Vern Jensen

4
NIE jest to plik Pythona. YAML i Python są podobne pod tym względem, że oba używają „nośnych białych znaków”, aby zmniejszyć ilość znaków interpunkcyjnych, których w innym przypadku potrzebowałbyś.
shacker

1
@shacker Wolę mieć interpunkcję.
bot_bot

Tak. Ale jakimś cudem wcięcie w Pythonie nigdy nie sprawiało mi tyle problemów, co w YAML. Za każdym razem dostaję się do obiektu w pozycji na liście. YAML to naprawdę okropny format. Dlaczego nie możemy po prostu mieć JSON z komentarzami i końcowymi przecinkami. Byłoby o wiele łatwiejsze.
Gellweiler

5

Lub, jeśli odstępy nie są problemem, może być potrzebna nazwa katalogu nadrzędnego zamiast nazwy pliku.

Nie, $ dev_appserver helloapp.py
ale$ dev_appserver hello/

Na przykład:

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

Przeciw

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

Może to pomoże komuś innemu, ale widziałem ten błąd, gdy prawa strona mapowania zawiera dwukropek bez ujętych cudzysłowów, na przykład:

someKey: inny klucz: zmiana, którą trzeba wprowadzić dzisiaj: wypracuj więcej

Powinien być

someKey: inny klucz: „Zmiana, którą trzeba wprowadzić dzisiaj: wypracuj więcej”


2

Widziałem ten błąd w podobnej sytuacji do wspomnianej w odpowiedzi Joe:

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

W wartości opisu mamy dwukropek. Tak więc problemem są brakujące cudzysłowy wokół wartości opisu. Można to rozwiązać, dodając cudzysłowy:

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

1

Błędny:

people:
  empId: 123
  empName: John
    empDept: IT

Poprawny:

people:
  emp:
    id: 123
    name: John
    dept: IT

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.