解析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复制而来,显然没有问题。我通过简单地删除然后重新键入'space'来创建有效(Unix)空间来解决它。
Nadjib Mami

Answers:



63

另一个原因是缩进错误,这意味着尝试创建错误的对象。我已经在Kubernetes Ingress定义中修复了一个问题:

错误

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

正确

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

4
是的,这也是我的问题。这就是为什么python愚蠢的原因。空格应该不重要。
肯尼·怀兰德

不知道这是一个python文件。我有一个额外的空间。疯。谢谢您的回答!
维尔恩·詹森

4
这不是Python文件。YAML和Python的相似之处在于,它们都使用“承载空白”来减少原本需要的标点数量。
shacker,

1
@shacker我宁愿标点符号。
bot_bot

是的 但是以某种方式,Python中的缩进从来没有像YAML那样给我带来太多问题。列表项间距中的对象每次都会吸引我。YAML确实是一种可怕的格式。为什么我们不能仅使用带有注释和尾随逗号的JSON。会容易得多。
Gellweiler

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

我在类似Joe的答案中提到的情况下看到了此错误:

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.