Errore durante l'analisi del file yaml: i valori di mappatura non sono consentiti qui


93

Voglio caricare un'app su Google App Engine:

Ho capito

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

Quando corri

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

con questo file app.yaml:

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

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

riga 2, colonna 8 corrisponde alla riga della versione. Cosa c'è che non va qui? A proposito, sto usando Ubuntu 12.04 qui.


Assicurati di non copiare il testo da Skype o da qualche software. Incolla prima il testo in un editor di testo, quindi copia da lì. Ho copiato da Skype e visibilmente non ci sono stati problemi. L'ho risolto semplicemente eliminando e quindi ridigitando "spazio" per creare spazi (Unix) validi.
Nadjib Mami

Risposte:



64

Un'altra causa è il rientro sbagliato, che significa provare a creare gli oggetti sbagliati. Ne ho appena risolto uno in una definizione di Kubernetes Ingress:

Sbagliato

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

Corretta

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

4
Sì, anche questo era il mio problema. Questo è il motivo per cui il pitone è fottutamente stupido. Gli spazi bianchi NON dovrebbero essere importanti.
Kenny Wyland

Non avevo idea che fosse un file Python. Avevo UNO spazio in più. Pazzo. Grazie per la risposta!
Vern Jensen

4
NON è un file Python. YAML e Python sono simili in quanto entrambi usano "spazi vuoti portanti" per ridurre la quantità di punteggiatura che altrimenti avresti bisogno.
shacker

1
@shacker Preferirei avere la punteggiatura.
bot_bot

Si. Ma in qualche modo il rientro in Python non mi ha mai dato tanti problemi come in YAML. L'oggetto nella spaziatura di una voce di elenco mi riceve ogni volta. YAML è davvero un formato orribile. Perché non possiamo avere solo JSON con commenti e virgole finali. Sarebbe molto più facile.
Gellweiler

5

Oppure, se la spaziatura non è il problema, potrebbe essere necessario il nome della directory principale anziché il nome del file.

Non $ dev_appserver helloapp.py
ma$ dev_appserver hello/

Per esempio:

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

Contro

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

Forse questo aiuterà qualcun altro, ma ho visto questo errore quando l'RHS della mappatura contiene i due punti senza racchiudere virgolette, come ad esempio:

someKey: un'altra chiave: Cambia da fare oggi: allenati di più

dovrebbe essere

someKey: un'altra chiave: "Modifica da apportare oggi: allenati di più"


2

Ho visto questo errore in una situazione simile a quella menzionata nella risposta di Joe:

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

Abbiamo due punti nel valore della descrizione. Quindi, il problema è nelle virgolette mancanti intorno al valore della descrizione. Può essere risolto aggiungendo virgolette:

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

1

Errato:

people:
  empId: 123
  empName: John
    empDept: IT

Corretta:

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

0

Il mio problema era una serie di citazioni mancanti;

Foo: bar 'baz'

dovrebbe essere

Foo: "bar 'baz'"
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.