在 Google App Engine 中将 php55 更新为 php74 时更新 app.yaml

问题描述

目前我的 Google App Engine 项目使用的是 PHP55,但由于社区不再支持此版本,我需要更新 app.yaml 文件以使用php74 runtime

这些是来自 app.yamlPHP55 文件的当前 URL 处理程序:

- url: /([^/]+\.PHP)
  script: \1

- url: /.*
  script: index.PHP
  login: required
  secure: always

当我指定 PHP74 运行时,这些 URL 处理程序会抛出错误

INVALID_ARGUMENT: script field for handler '/([^/]+\.PHP)' must be set to 'auto' for runtime PHP74.
INVALID_ARGUMENT: script field for handler '/.*' must be set to 'auto' for runtime PHP74.

当我在 app.yaml for PHP74 中进行建议的修复并更改 URL 处理程序时:

- url: /([^/]+\.PHP)
  script: auto

- url: /.*
  script: auto
  login: required
  secure: always

这将返回以下错误ResourceNotFoundException: No routes found...

我对这些 URL 处理程序做错了什么?我的项目使用 PHP55 版本的 URL 处理程序,但当我在 script: auto 文件PHP74 版本中指定 app.yaml 时不工作。

解决方法

根据documentation,为了正确迁移你的app.yaml,你必须放置一个front controller来处理所有的路由。如果您是从旧版应用迁移,以下是文档提供的示例:

switch (@parse_url($_SERVER['REQUEST_URI'])['path']) {
    case '/':
        require 'homepage.php';
        break;
    case '/contact.php':
        require 'contact.php';
        break;
    default:
        http_response_code(404);
        exit('Not Found');
}

另外,我建议您检查一下您的 app.yaml 中是否使用了不推荐使用的元素,如果使用任何元素都会出错。 最后,如果这一切有效,我建议您检查 this 以查看您的 app.yaml 是否有任何您没有注意到的错误。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...