Google App Engine“解析./app.yaml时出错:未知的url处理程序类型”

Posted

技术标签:

【中文标题】Google App Engine“解析./app.yaml时出错:未知的url处理程序类型”【英文标题】:Google App Engine "Error parsing ./app.yaml: Unknown url handler type" 【发布时间】:2014-10-16 17:13:34 【问题描述】:

我正在关注如何在 Google App Engine 上安装 phpMyAdmin 的教程,并且我完全按照说明进行操作,当我去推送应用程序时,我遇到了解析错误。这是教程链接: https://gae-php-tips.appspot.com/2013/05/26/setting-up-phpmyadmin-on-app-engine/

我搜索了 Stackoverfllow 并发现了一些具有相同错误的问题,几乎每个人都说这是导致它的缩进问题,但我已经多次查看我的文件并没有在 app.yaml 文件中找到任何缩进。

这是我的 app.yaml 文件

application: phpmyadmin2121
version: phpmyadmin
runtime: php
api_version: 1

handlers:
- url: /(.*\.(ico$|jpg$|png$|gif$))
static_files: phpMyAdmin/\1
upload: phpMyAdmin/(.*\.(ico$|jpg$|png$|gif$))
application_readable: true

- url: /(.*\.(htm$|html$|css$|js$))
static_files: phpMyAdmin/\1
upload: phpMyAdmin/(.*\.(htm$|html$|css$|js$))
application_readable: true

- url: /(.*\.(php$))
script: phpMyAdmin/\1
secure: always
login: admin

- url: /(.+)
script: phpMyAdmin/index.php
secure: always
login: admin

- url: /
script: phpMyAdmin/index.php
secure: always
login: admin

这是显示错误的命令行提示:

Michaels-MacBook-Air:phpMyAdmin Mike$ appcfg.py -R -A phpmyadmin2121 -V phpmyadmin update 。 用法:appcfg.py [options] update | [文件,...]

appcfg.py: error: Error parsing ./app.yaml: Unknown url handler type.
<URLMap 
    secure=default 
    static_files=None 
    application_readable=None 
    auth_fail_action=redirect 
    require_matching_file=None 
    static_dir=None 
    redirect_http_response_code=None 
    http_headers=None 
    url=/(.*\.(ico$|jpg$|png$|gif$)) 
    script=None 
    upload=None 
    api_endpoint=None 
    expiration=None 
    position=None 
    login=optional 
    mime_type=None
    >
  in "./app.yaml", line 8, column 1

【问题讨论】:

【参考方案1】:

万一其他人遇到这个问题,我也遇到了同样的问题。您必须为所有子目录添加 两个 空格。确保单词与“url”一致。

不起作用:

- url: /
script: phpMyAdmin/index.php
secure: always
login: admin

不起作用:

- url: /
 script: phpMyAdmin/index.php
 secure: always
 login: admin

作品:

- url: /
  script: phpMyAdmin/index.php
  secure: always
  login: admin

另外,更改行以从这里更新应用程序:

appcfg.py -R -A my_application_id -V phpmyadmin update .

到这里:

appcfg.py --oauth2 -R -A my_application_id -V phpmyadmin update .

出于某种奇怪的原因,第一个命令要求您提供电子邮件和密码(我的个人电子邮件不起作用)。将第二个命令与 --oauth2 选项一起使用即可。

【讨论】:

这就是我讨厌 YAML 的原因。需要非常好的视力来判断您是否拥有正确的空格数。 你大(我)人!花了太多时间试图解决这个问题!【参考方案2】:

就我而言,这不是空格问题。

我原来有 app.yaml 文件:

runtime: nodejs12

handlers:
- url: /.*
  secure: always

... more handlers here ...

在部署时产生了错误

Unknown url handler type.
<URLMap 
    secure=always
    ...
    >

https://cloud.google.com/appengine/docs/standard/nodejs/config/appref#handlers_element 的文档表明我的处理程序元素中缺少 script: auto

为了使用静态处理程序,至少有一个处理程序必须包含 line script: auto 或定义一个入口点元素才能成功部署。

所以我更新了我的 app.yaml:

runtime: nodejs12

handlers:
- url: /.*
  secure: always
  script: auto

... more handlers here ...

部署成功。

【讨论】:

【参考方案3】:

尝试为任何子项添加空格。 PHP 使用与 python 相同的解析器。在 python 中,空格用于表示块。

application: phpmyadmin2121
version: phpmyadmin
runtime: php
api_version: 1

handlers:
- url: /(.*\.(ico$|jpg$|png$|gif$))
  static_files: phpMyAdmin/\1
  upload: phpMyAdmin/(.*\.(ico$|jpg$|png$|gif$))
  application_readable: true

- url: /(.*\.(htm$|html$|css$|js$))
  static_files: phpMyAdmin/\1
  upload: phpMyAdmin/(.*\.(htm$|html$|css$|js$))
  application_readable: true

- url: /(.*\.(php$))
  script: phpMyAdmin/\1
  secure: always
  login: admin

- url: /(.+)
  script: phpMyAdmin/index.php
  secure: always
  login: admin

- url: /
  script: phpMyAdmin/index.php
  secure: always
  login: admin

【讨论】:

我试过了,但仍然返回一个错误,唯一不同的是现在它显示第 2 列。这很奇怪,因为我的其他应用程序没有错误并且它有类似的东西 奇怪的是,我刚刚尝试过,它成功了。我注意到的第一件事是您在 app.yaml 中的 appID 与您在命令行中输入的不匹配。你能运行 tree /f /a > tree.txt 并包含 5 行吗? 我是故意改的,但是忘记改命令行复制粘贴了,谢谢。我只是认为在此处发布您的应用程序名称是不明智的,但感谢您的尝试【参考方案4】:

我遇到了同样的问题。教程中的错误确实是破折号下方的行上缺少两个空格,所以从

handlers:
- url: /(.*\.(ico$|jpg$|png$|gif$))
static_files: phpMyAdmin/\1
upload: phpMyAdmin/(.*\.(ico$|jpg$|png$|gif$))

...

handlers:
- url: /(.*\.(ico$|jpg$|png$|gif$))
  static_files: phpMyAdmin/\1
  upload: phpMyAdmin/(.*\.(ico$|jpg$|png$|gif$))

...

【讨论】:

以上是关于Google App Engine“解析./app.yaml时出错:未知的url处理程序类型”的主要内容,如果未能解决你的问题,请参考以下文章

Google App Engine Node.js 应用程序 - “解析 app.yaml 时出错:未知 url 处理程序类型”

在 Google-App-Engine 中使用 HSQLDB

Google Cloud 中的 Google Compute Engine、App Engine 和 Container Engine 有啥区别?

连接 Google App Engine 和 Google Compute Engine

Google App Engine Flexible 和 Google Container Engine 之间的区别?

如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?