Error al analizar el archivo yaml: aquí no se permiten valores de asignación

90

Quiero subir una aplicación a Google App Engine:

entiendo esto

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

Al correr

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

con este archivo app.yaml:

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

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

línea 2, columna 8 corresponde a la línea de versión. ¿Que esta mal aquí? Por cierto, estoy usando Ubuntu 12.04 aquí.

andandand
fuente
Asegúrese de no copiar el texto de Skype o algún software. Pegue el texto primero en un editor de texto y luego cópielo desde allí. Copié de Skype y visiblemente no hubo problemas. Lo resolví simplemente eliminando y luego volviendo a escribir 'espacio' para crear espacios válidos (Unix).
Nadjib Mami

Respuestas:

63

Otra causa es una sangría incorrecta, lo que significa intentar crear los objetos incorrectos. Acabo de arreglar uno en una definición de Kubernetes Ingress:

Incorrecto

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

Correcto

- path: /
  backend:
    serviceName: <service_name>
    servicePort: <port>
lcfd
fuente
4
Sí, este también era mi problema. Por eso Python es jodidamente estúpido. Los espacios en blanco NO deberían ser importantes.
Kenny Wyland
No tenía idea de que se trataba de un archivo de Python. Tenía UN espacio extra. Loco. ¡Gracias por la respuesta!
Vern Jensen
4
NO es un archivo de Python. YAML y Python son similares en que ambos usan "espacios en blanco que soportan carga" para reducir la cantidad de puntuación que de otro modo necesitaría.
shacker
1
@shacker Prefiero tener puntuación.
bot_bot
Si. Pero de alguna manera, la sangría en Python nunca me dio tantos problemas como en YAML. El espaciado del objeto en un elemento de lista me atrapa cada vez. YAML realmente es un formato horrible. ¿Por qué no podemos tener JSON con comentarios y comas finales? Sería mucho más fácil.
Gellweiler
5

O, si el espaciado no es el problema, es posible que desee el nombre del directorio principal en lugar del nombre del archivo.

$ dev_appserver helloapp.py
Pero no$ dev_appserver hello/

Por ejemplo:

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

Versus

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
John Mee
fuente
2

Tal vez esto ayude a alguien más, pero he visto este error cuando el RHS del mapeo contiene dos puntos sin entre comillas, como:

someKey: otra clave: cambiar para hacer hoy: hacer más ejercicio

debiera ser

someKey: otra clave: "Cambiar para hacer hoy: hacer más ejercicio"

Joe
fuente
2

He visto este error en una situación similar a la mencionada en la respuesta de Joe:

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

Tenemos dos puntos en el valor de descripción. Entonces, el problema está en las comillas que faltan alrededor del valor de la descripción. Se puede resolver agregando comillas:

description: 'Too high 5xx responses rate: {{ .Value }} > 0.05'
Evgeny Veretennikov
fuente
1

Incorrecto:

people:
  empId: 123
  empName: John
    empDept: IT

Correcto:

people:
  emp:
    id: 123
    name: John
    dept: IT
Sajeev
fuente
0

Mi problema fue un conjunto faltante de citas;

Foo: bar 'baz'

debiera ser

Foo: "bar 'baz'"
Graham P Heath
fuente