Fehler beim Parsen der Yaml-Datei: Zuordnungswerte sind hier nicht zulässig


90

Ich möchte eine App in Google App Engine hochladen:

Ich verstehe das

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

Beim Laufen

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

mit dieser app.yaml Datei:

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

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

Zeile 2, Spalte 8 entspricht der Versionszeile. Was ist hier falsch? Übrigens verwende ich hier Ubuntu 12.04.


Stellen Sie sicher, dass Sie den Text nicht von Skype oder einer anderen Software kopieren. Fügen Sie den Text zuerst in einen Texteditor ein und kopieren Sie ihn dann von dort aus. Ich habe von Skype kopiert und es gab sichtbar keine Probleme. Ich habe es gelöst, indem ich einfach 'space' gelöscht und dann erneut eingegeben habe, um gültige (Unix) Leerzeichen zu erstellen.
Nadjib Mami

Antworten:



63

Eine andere Ursache ist ein falscher Einzug, bei dem versucht wird, die falschen Objekte zu erstellen. Ich habe gerade eine in einer Kubernetes Ingress-Definition behoben:

Falsch

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

Richtig

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

4
Ja, das war auch mein Problem. Das ist der Grund, warum Python dumm ist. Leerzeichen sollten NICHT wichtig sein.
Kenny Wyland

Hatte keine Ahnung, dass dies eine Python-Datei war. Ich hatte einen zusätzlichen Platz. Verrückt. Danke für die Antwort!
Vern Jensen

4
Es ist KEINE Python-Datei. YAML und Python ähneln sich darin, dass beide "tragende Leerzeichen" verwenden, um die Menge an Interpunktion zu reduzieren, die Sie sonst benötigen würden.
Shacker

1
@shacker Ich hätte lieber Interpunktion.
Bot_bot

Ja. Aber irgendwie hat mir die Einrückung in Python nie so viele Probleme bereitet wie in YAML. Das Objekt in einem Listenelementabstand bringt mich jedes Mal. YAML ist wirklich ein schreckliches Format. Warum können wir nicht einfach JSON mit Kommentaren und nachgestellten Kommas haben? Wäre so viel einfacher.
Gellweiler

5

Wenn der Abstand nicht das Problem ist, wird möglicherweise der Name des übergeordneten Verzeichnisses anstelle des Dateinamens verwendet.

Nicht $ dev_appserver helloapp.py
aber$ dev_appserver hello/

Zum Beispiel:

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

Gegen

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

Vielleicht hilft dies jemand anderem, aber ich habe diesen Fehler gesehen, wenn die rechte Seite des Mappings einen Doppelpunkt ohne Anführungszeichen enthält, wie z.

someKey: ein weiterer Schlüssel: Heute ändern: mehr trainieren

sollte sein

someKey: ein weiterer Schlüssel: "Heute ändern: mehr trainieren"


2

Ich habe diesen Fehler in einer ähnlichen Situation gesehen wie in Joes Antwort:

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

Wir haben einen Doppelpunkt im Beschreibungswert. Das Problem liegt also in fehlenden Anführungszeichen um den Beschreibungswert. Es kann durch Hinzufügen von Anführungszeichen gelöst werden:

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

1

Falsch:

people:
  empId: 123
  empName: John
    empDept: IT

Richtig:

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

0

Mein Problem war ein fehlender Satz von Zitaten;

Foo: bar 'baz'

sollte sein

Foo: "bar 'baz'"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.