我有一个Laravel网络应用程序,其中包含我在工作台中开发的软件包。该包是应用的 git 存储库的一部分。该应用程序托管在 Elastic Beanstalk 环境中。
当我使用eb deploy
部署应用程序时,我在 eb-activity 中收到以下错误.log(来自 eb logs
):
...
(output of composer package fetches)
...
Generating autoload files
PHP Fatal error: Class 'MeMyPackageMyPackageServiceProvider' 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 'MeMyPackageMyPackageServiceProvider' not found in /var/app/ondeck/vendor/laravel/framework/src/Illuminate/Foundation/ProviderRepository.php on line 157
我在开发机器上看到了类似的错误,我通过在工作台包目录中运行composer install
来解决,如找不到 Laravel 4 工作台类中所述。问题是,在 EB 在应用程序供应商目录上运行作曲家之前,我无法在我的软件包上运行作曲家。配置文件的commands
块太早 - 文件尚未在服务器上 - 并且container_commands块太晚,因为它发生在EB运行composer之后。
如何先运行我的包编辑器?
我解决了这个问题,尽管感觉有点笨拙。如果应用程序的根目录中有供应商目录,EB 不会自动运行作曲家,所以......
- 编辑
/.gitignore
并删除显示/vendor 的行 使用以下内容创建
/vendor/.gitignore
并将其添加到 git。这会将包含单个.gitignore
文件的vendor
目录添加到 git,但会忽略其余的供应商包子目录(将在部署期间由 composer 填写)。# ignore everything except .gitignore !.gitignore *
您可能已经在
/.ebextensions
中有一个作曲家部署配置文件,但以防万一,这是我的全部内容(称为01composersettings.config
),因为其他命令也进行了一些调查。特定于我的问题的两个命令是在02installPackages
之前运行的01installWorkbenchPackages
。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
可以方便地检查所有文件是否都在那里,包括只有.gitignore
的vendor
目录)- 运行
eb deploy