使用 Amazon Elastic Beanstalk 部署 Laravel 工作台包
Posted
技术标签:
【中文标题】使用 Amazon Elastic Beanstalk 部署 Laravel 工作台包【英文标题】:Deploying Laravel workbench package with Amazon Elastic Beanstalk 【发布时间】:2015-02-21 23:27:51 【问题描述】:我有一个 Laravel Web 应用程序,其中包含我在工作台中开发的包。该软件包是应用程序 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":157Script 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
解决了,如Laravel 4 workbench class not found 中所述。问题是在 EB 在应用程序供应商目录上运行 composer 之前,我无法在我的包上运行 composer。配置文件的 commands
块太早了——文件还没有在服务器上——而 container_commands 块太晚了,因为它发生在 EB 运行 composer 之后。
如何先运行我的包编写器?
【问题讨论】:
【参考方案1】:我想我已经解决了这个问题,虽然感觉有点笨拙。如果应用的根目录中有供应商目录,EB 不会自动运行 composer,所以...
-
编辑
/.gitignore
并删除显示 /vendor 的行
使用以下内容创建/vendor/.gitignore
并将其添加到git。这会将带有单个 .gitignore
文件的 vendor
目录添加到 git,但忽略供应商包子目录的其余部分(将在部署期间由 composer 填写)。
# 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
【讨论】:
以上是关于使用 Amazon Elastic Beanstalk 部署 Laravel 工作台包的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Amazon Elastic Mapreduce 之上使用 Hive 来处理 Amazon Simple DB 中的数据?
使用 Amazon Elastic Beanstalk 部署 symfony2.1 应用程序
使用 Elastic Beanstalk 和 Amazon RDS 的连接池
如何使用 Amazon linux 2 在 Elastic beanstalk 中使用多容器 docker?