Почему Composer не обнаруживается Google Cloud Build?

Я пытаюсь развернуть новое приложение в App Engine (стандартная среда). Это приложение Laravel 11, PHP 8.3, которое я развертываю с помощью действий GitHub.

Проблема в том, что он успешно загружен в Google Cloud, но Cloud Build не определяет, что он должен работать composer install. Я проверил журналы сборки и увидел это:

На этапе сборки мое предыдущее приложение (Laravel 9, PHP 8.2) всегда запускает детектор, который обнаруживает, что необходимо запустить композитор:

===> DETECTING
Timer: Detector started at 2024-05-27T00:01:25Z
5 of 6 buildpacks participating
google.php.runtime          0.0.2
google.php.composer-install 0.0.1
google.php.composer         0.9.1
google.php.appengine        0.9.0
google.utils.label-image    0.0.2
Timer: Detector ran for 179.182403ms and ended at 2024-05-27T00:01:25Z

Теперь мой Laravel 11, PHP 8.3 на этапе сборки имеет только это:

===> DETECTING
Timer: Detector started at 2024-05-26T21:41:32Z
3 of 6 buildpacks participating
google.php.runtime       0.0.2
google.php.appengine     0.9.0
google.utils.label-image 0.0.2
Timer: Detector ran for 175.726391ms and ended at 2024-05-26T21:41:32Z

Теперь, согласно Cloud Docs, Composer запускается автоматически, если вам требуется autoload.php (что справедливо для приложений Laravel в public/index.php).

Для контекста, это мой .github/workflows/v2.yml:

name: V2 Deployment

on:
  push:
    branches:
      - v2

jobs:
  build:
    name: 📦 Build the App
    runs-on: ubuntu-latest
    steps:
      - name: 💾 Get the latest code
        uses: actions/checkout@v4

      - name: 🧩 Build the frontend
        run: |
          npm install
          npm run build

      - name: 📤 Upload frontend
        uses: actions/upload-artifact@v4
        with:
          name: frontend
          path: public/build

  deploy_staging:
    name: 🦺 Deploy to staging (v2)
    runs-on: ubuntu-latest
    environment: staging
    needs: build
    permissions:
      id-token: write
      contents: read
    steps:
      - name: 💾 Get the latest code
        uses: actions/checkout@v4

      - name: 📥 Download frontend
        uses: actions/download-artifact@v4
        with:
          name: frontend
          path: public/build

      - name: 🔑 Authenticate to Google Cloud
        uses: google-github-actions/auth@v2
        with:
          workload_identity_provider: ${{ vars.GCLOUD_WORKLOAD_IDENTITY_PROVIDER }}
          service_account: ${{ vars.GCLOUD_SERVICE_ACCOUNT }}

      - name: 🚀 Deploy to App Engine
        uses: google-github-actions/deploy-appengine@v2
        with:
          project_id: ${{ vars.GCLOUD_PROJECT }}
          version: v2
          deliverables: .github/workflows/appengine/staging.yaml 
          gcloud_component: beta
          flags: --no-cache

А это мой .github/workflows/appengine/staging.yaml:

runtime: php83
env: standard
service: staging
handlers:
  - url: /(.*\.(bmp|gif|png|jpg|jpeg|png|ico))$
    static_files: public/\1
    upload: public/.*\.(bmp|gif|png|jpg|jpeg|png|ico)$
  - url: /(.*\.ico)$
    static_files: public/\1
    upload: public/.*\.icon$
  - url: /(.*\.mp4)$
    mime_type: video/mp4
    static_files: public/\1
    upload: public/.*\.mp4$
  - url: /(.*\.css)$
    mime_type: text/css
    static_files: public/\1
    upload: public/.*\.css$
  - url: /(.*\.js)$
    mime_type: application/javascript
    static_files: public/\1
    upload: public/.*\.js$
  - url: /(.*\.json)$
    mime_type: application/json
    static_files: public/\1
    upload: public/.*\.json$
  - url: /(.*\.(svg|svgz))$
    mime_type: image/svg+xml
    static_files: public/\1
    upload: public/.*\.(svg|svgz)$
  - url: /(.*\.txt)$
    mime_type: text/plain
    static_files: public/\1
    upload: public/.*\.txt$
  - url: /(.*\.ttf)$
    mime_type: font/ttf
    static_files: public/\1
    upload: public/.*\.ttf$
  - url: /(.*\.woff2)$
    mime_type: font/woff2
    static_files: public/\1
    upload: public/.*\.woff2$
  - url: /(.*\.map)$
    mime_type: application/json
    static_files: public/\1
    upload: public/.*\.map$
env_variables:
  VIEW_COMPILED_PATH: /tmp
  CACHE_STORAGE_PATH: /tmp/framework/cache/data

(примечание: service: staging в staging.yaml действителен, поскольку я развернул V1 с действительным dispatch.yaml).

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что ж, бритва Оккама никогда не перестает меня впечатлять. Проблема в том, что мой v2.yml не находится в корневом каталоге приложения. Я думал, что это не будет проблемой, потому что я попытался установить working_directory: ./ (см. входные данные действия ). Но это...

Итак, для разработчиков, которые одержимо пытаются привести в порядок свою кодовую базу, вот недостающий шаг, который я добавил перед 🚀 Deploy to App Engine:

      - name: 📑 Move the GAE deliverables
        run: |
          mv .github/workflows/appengine/staging.yaml app.yaml
          mv .github/workflows/appengine/dispatch.yaml dispatch.yaml

а затем измените путь к результатам:

      - name: 🚀 Deploy to App Engine
        uses: google-github-actions/deploy-appengine@v2
        with:
          project_id: ${{ vars.GCLOUD_PROJECT }}
          version: v2
          deliverables: app.yaml dispatch.yaml

PS: Это создало еще одну проблему с Cloud Composer:

Problem 1
Step #2 - "build":     - laravel/framework is locked to version v11.0.5 and an update of this package was not requested.
Step #2 - "build":     - laravel/framework v11.0.5 requires composer-runtime-api ^2.2 -> found composer-runtime-api[2.1.0] but it does not match the constraint.

...поэтому мне также пришлось добавить это на шаг развертывания:

          build_env_vars:
            GOOGLE_COMPOSER_VERSION=2.2.1

Другие вопросы по теме

Похожие вопросы

Не удалось получить желаемый результат и получил ошибку такого типа: «htmlspecialchars() ожидает, что параметр 1 будет строкой, задан массив»
Как загрузить файлы APK во входной файл в формате HTML/PHP
Данные пользовательского элемента корзины WooCommerce отображаются дважды в блоках корзины и оформления заказа
Пропустить отложенную загрузку по классу изображения, добавленному в элемент рисунка в WordPress
Использование файла cookie laravel 11 для ручной аутентификации запроса
PHP-скрипт WordPress некорректно вызывается Javascript
Отображение оставшегося количества на складе для каждой позиции заказа только в уведомлении по электронной почте о новом заказе WooCommerce
Предвидение Laravel с использованием alpinejs не работает с alpine.data()
Используйте значения полей продукта WC Kalkulator для обновления свойств продукта в корзине WooCommerce
Измените стоимость доставки WooCommerce в зависимости от выбранного способа оплаты