Yaml dosyası ayrıştırılırken hata oluştu: burada eşleme değerlerine izin verilmez


93

Google App Engine'e bir uygulama yüklemek istiyorum:

Anladım

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

Koşarken

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

bu app.yaml dosyasıyla:

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

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

2. satır, 8. sütun sürüm satırına karşılık gelir. Burada sorun ne? Btw, burada Ubuntu 12.04 kullanıyorum.


Metni Skype'tan veya bazı yazılımlardan kopyalamadığınızdan emin olun. Metni önce bir metin düzenleyiciye yapıştırın, ardından oradan kopyalayın. Skype'tan kopyaladım ve gözle görülür şekilde hiçbir sorun yoktu. Bunu, geçerli (Unix) alanlar oluşturmak için basitçe silerek ve sonra yeniden yazarak çözdüm.
Nadjib Mami

Yanıtlar:



64

Diğer bir neden de yanlış girintidir, yani yanlış nesneleri yaratmaya çalışmaktır. Kubernetes Giriş tanımında bir tane düzelttim:

Yanlış

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

Doğru

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

4
Evet, bu benim de sorunumdu. Python'un aptal olmasının nedeni budur. Boşluk önemli OLMAMALIDIR.
Kenny Wyland

Bunun bir python dosyası olduğunu bilmiyordum. BİR ekstra alanım vardı. Çılgın. Cevap için teşekkür ederim!
Vern Jensen

4
Bu bir Python dosyası DEĞİLDİR. YAML ve Python, aksi takdirde ihtiyaç duyacağınız noktalama işaretlerinin miktarını azaltmak için her ikisi de "yük taşıyan boşluk" kullanmaları bakımından benzerdir.
shacker

1
@shacker Noktalama işaretlerini tercih ederim.
bot_bot

Evet. Ama bir şekilde python'daki girinti bana hiçbir zaman YAML'deki kadar sorun çıkarmadı. Liste öğesi aralığındaki nesne beni her seferinde alıyor. YAML gerçekten korkunç bir format. Neden sadece yorum ve virgül içeren JSON'a sahip olamıyoruz? Çok daha kolay olurdu.
Gellweiler

5

Veya boşluk sorun değilse, dosya adı yerine ana dizin adını isteyebilir.

Değil $ dev_appserver helloapp.py
ama$ dev_appserver hello/

Örneğin:

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

Karşı

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

Belki bu başka birine yardımcı olabilir, ancak bu hatayı, eşlemenin RHS'si tırnak işaretleri olmadan iki nokta üst üste içerdiğinde gördüm, örneğin:

someKey: başka bir anahtar: Bugün yapmak için değiştirin: daha fazlasını yapın

olmalı

someKey: başka bir anahtar: "Bugünü yapmak için değiştirin: daha fazla çalışın"


2

Bu hatayı Joe'nun cevabında bahsedilen benzer bir durumda gördüm:

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

Açıklama değerinde bir kolonumuz var. Dolayısıyla sorun, açıklama değerinin etrafındaki eksik tırnak işaretleridir. Alıntılar eklenerek çözülebilir:

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

1

Yanlış:

people:
  empId: 123
  empName: John
    empDept: IT

Doğru:

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.