1

我在 php 上为 GAE 开发了一个简单的应用程序。在本地环境中一切正常,但在“gcloud app deploy”之后出现关于 autoload.php 的错误 - 没有这样的文件或目录。我只使用作曲家来自动加载我的类——而不是外部依赖。GAE标准,项目不计费

我在本地做什么:

composer install 
dev_appserver.py app.test.yaml

并且应用程序运行良好。

但部署后:

PHP Fatal error:  require_once(): Failed opening required '/base/data/home/apps/***/vendor/autoload.php' (include_path='.;/base/data/home/apps/***/;/base/alloc/tmpfs/dynamic_runtimes/php55_dynamic/fc2f1b4915ea2bca/sdk') in /base/data/home/apps/***/webhook.php on line 8

第 8 行:

require_once __DIR__ . '/vendor/autoload.php';

作曲家.json

{
    "autoload": {
        "psr-4": {
            "Core\\": "Classes/",
            "Telegram\\": "Classes/Telegram",
            "PushEvent\\": "Classes/PushEvent"
        }
    }
}

所以现在我从 .gcloudignore 中删除了供应商 - 并且应用程序正在 GAE 上运行,但这件事让我很难过 :(

4

1 回答 1

3

您可以明确告诉 GAE 运行composer installor composer dump-autoload

{
    "scripts": {
        "gcp-build": [
            "composer install"
        ]
    }
}

Tip1:GAE缓存安装文件,有时你可能不想使用它:gcloud beta app deploy --no-cache]

Tip2:我建议您在 app.yaml 中更改应用程序的文档根目录,以免将供应商目录暴露给外界。

runtime_config:
  document_root: public

目录结构:

src
 - OtherFolder //PSR-4
    - ClassA.php 
public
 - index.php
vendor
 - autoload.php
 - ...
compose.json
app.yaml

要求必须引用父文件夹

require_once __DIR__ . '/../vendor/autoload.php';

而 composer.json 只需要一个 psr4 条目

{
    "autoload": {
        "psr-4": {
            "MyApp\\": "src/"
        }
    }
}
于 2019-06-12T14:47:44.477 回答