GAE не запускает композитор после развертывания

Я разрабатываю простое приложение для GAE на php. В локальном env все в порядке, но после «развертывания приложения gcloud» появляется ошибка 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';

composer.json

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

Итак, теперь я удаляю поставщика из .gcloudignore - и приложение работает с GAE, но это меня огорчает :(


person Maksim    schedule 24.03.2019    source источник


Ответы (1)


Вы можете явно указать GAE запустить composer install или composer dump-autoload.

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

Совет 1. GAE кэширует установочные файлы, и иногда вы можете не использовать его: gcloud beta app deploy --no-cache]

Совет 2: я рекомендую вам изменить корень документа приложения в 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/"
        }
    }
}
person filipe    schedule 12.06.2019
comment
Я создаю файл package.json с вашим скриптом, но по-прежнему возникает ошибка с requre :( - person Maksim; 14.06.2019
comment
Действительно ? @Maksim Можете ли вы разместить свой код на github и поделиться им со мной? - person filipe; 15.06.2019
comment
Я нашел! В php55 runtime composer не работает - только для php72. - person Maksim; 16.06.2019
comment
Разве document_root не должен быть общедоступным, а не src? - person Dr. House; 10.10.2019