เกิดข้อผิดพลาดในการแยกวิเคราะห์ไฟล์ yaml: ไม่อนุญาตให้ใช้ค่าการแมปที่นี่


92

ฉันต้องการอัปโหลดแอปไปยัง 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 ตรงกับบรรทัดเวอร์ชัน มีอะไรผิดปกติที่นี่? Btw ฉันใช้ Ubuntu 12.04 ที่นี่


ตรวจสอบให้แน่ใจว่าคุณไม่ได้คัดลอกข้อความจาก Skype หรือซอฟต์แวร์บางตัว วางข้อความลงในโปรแกรมแก้ไขข้อความก่อนจากนั้นคัดลอกจากที่นั่น ฉันคัดลอกจาก Skype และเห็นได้ชัดว่าไม่มีปัญหา ฉันแก้ไขได้โดยเพียงแค่ลบแล้วพิมพ์ 'space' ใหม่เพื่อสร้างช่องว่าง (Unix) ที่ถูกต้อง
Nadjib Mami

คำตอบ:



64

อีกสาเหตุหนึ่งคือการเยื้องผิดซึ่งหมายถึงการพยายามสร้างวัตถุที่ไม่ถูกต้อง ฉันเพิ่งแก้ไขหนึ่งในคำจำกัดความ Kubernetes Ingress:

ไม่ถูกต้อง

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

แก้ไข

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

4
ใช่นี่ก็เป็นปัญหาของฉันเช่นกัน นี่คือเหตุผลว่าทำไมหลามถึงโง่เขลา ช่องว่างไม่ควรสำคัญ
Kenny Wyland

ไม่รู้ว่านี่เป็นไฟล์ python ฉันมีพื้นที่พิเศษหนึ่งที่ บ้า. ขอบคุณสำหรับคำตอบ!
Vern Jensen

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'


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.