У меня есть веб-приложение 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.
Как мне сначала запустить мой компоновщик пакетов?
Я думаю, что я решил это, хотя это кажется немного хакерским. EB не запустит composer автоматически, если в корне приложения есть каталог vendor, так что …
/.gitignore
и удалите строку с надписью / vendorСоздайте /vendor/.gitignore
со следующим содержанием и добавьте его в git. Это добавляет vendor
каталог с одним .gitignore
файл для git, но игнорирует остальные подкаталоги пакетов поставщика (которые будут заполнены композитором во время развертывания).
# ignore everything except .gitignore
!.gitignore
*
Возможно, у вас уже есть файл конфигурации развертывания композитора в /.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"
Удостовериться /.ebextensions/01composersettings.config
также является частью индекса git (git ls-tree -r master --name-only
удобно проверить наличие всех файлов, включая vendor
каталог с просто .gitignore
в этом)
eb deploy
Других решений пока нет …