Развертывание пакета рабочей среды Laravel с Amazon Elastic Beanstalk

У меня есть веб-приложение Laravel, которое включает в себя пакет, который я разрабатываю в рабочей среде. Пакет является частью git-репозитория приложения. Приложение размещено в среде Elastic Beanstalk.

Когда я развертываю приложение, используя eb deploy Я получаю следующую ошибку в eb-activity.log (из eb logs):

...
(output of composer package fetches)
...
Generating autoload files
PHP Fatal error:  Class 'Me\MyPackage\MyPackageServiceProvider' not found in /var/app/ondeck/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 157
{"error":{"type":"Symfony\\Component\\Debug\\Exception\\FatalErrorException","message":"Class 'Me\\MyPackage\\MyPackageServiceProvider' not found","file":"\/var\/app\/ondeck\/vendor\/laravel\/framework\/src\/Illuminate\/Foundation\/ProviderRepository.php","line":157}}Script php artisan clear-compiled handling the post-install-cmd event returned with an error[RuntimeException]
Error Output: PHP Fatal error:  Class 'Me\MyPackage\MyPackageServiceProvider' not found in /var/app/ondeck/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 157

Я увидел похожую ошибку на моей машине, которую я решил, запустив composer install в каталоге пакета Workbench, как описано в Класс верстака Laravel 4 не найден. Проблема в том, что я не могу запустить composer в моем пакете, пока EB не запустит composer в каталоге Vendor приложения. commands блок файла конфигурации слишком ранний — файлы еще не на сервере — и блок container_commands слишком поздний, потому что это происходит после того, как EB запустит composer.

Как мне сначала запустить мой компоновщик пакетов?

0

Решение

Я думаю, что я решил это, хотя это кажется немного хакерским. EB не запустит composer автоматически, если в корне приложения есть каталог vendor, так что …

  1. редактировать /.gitignore и удалите строку с надписью / vendor
  2. Создайте /vendor/.gitignore со следующим содержанием и добавьте его в git. Это добавляет vendor каталог с одним .gitignore файл для git, но игнорирует остальные подкаталоги пакетов поставщика (которые будут заполнены композитором во время развертывания).

    # ignore everything except .gitignore
    !.gitignore
    *
    
  3. Возможно, у вас уже есть файл конфигурации развертывания композитора в /.ebextensions но на всякий случай вот все содержимое моего (называется 01composersettings.config), так как другие команды также провели некоторое расследование. Две команды, характерные для моей проблемы: 01installWorkbenchPackages который бежит раньше 02installPackages,

    commands:
    01updateComposer:
    command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update
    
    option_settings:
    - namespace: aws:elasticbeanstalk:application:environment
    option_name: COMPOSER_HOME
    value: /root
    
    container_commands:
    01installWorkbenchPackages:
    command: "/usr/bin/composer.phar install -d /var/app/ondeck/workbench/me/my-package"02installPackages:
    command: "/usr/bin/composer.phar install"03optimize:
    command: "/usr/bin/composer.phar dump-autoload --optimize"04storagePermissions:
    command: "chmod -fR 755 /var/app/ondeck/app/storage"
  4. Удостовериться /.ebextensions/01composersettings.config также является частью индекса git (git ls-tree -r master --name-only удобно проверить наличие всех файлов, включая vendor каталог с просто .gitignore в этом)

  5. Бежать eb deploy
0

Другие решения

Других решений пока нет …