我刚刚开始学习 Laravel,并且配置了一个代码管道以使用 Elastic Beanstalk 在 EC2 实例上部署我的示例 Laravel 应用程序。
应用程序部署工作正常,没有任何问题。
但是,删除现有包并在 composer.json 文件中添加另一个包后,部署失败并出现以下错误。
实例部署无法安装源包中“composer.json”中指定的 Composer 依赖项。 AWS 管道
我找到了几个与此问题相关的答案,但没有一个对我有用。我定义了 .ebextension 文件夹,其中包含 01-composer-install.config 文件。该文件包含以下内容:
commands:
01_update_composer:
command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update
option_settings:
- namespace: aws:elasticbeanstalk:application:environment
option_name: COMPOSER_HOME
value: /root
但是,这并不能解决问题。
根据 AWS 文档此处,“当 Elastic Beanstalk 在实例上找到供应商文件夹时,它会忽略composer.json 文件(即使它存在)。然后您的应用程序将使用供应商文件夹中的依赖项”。
我的假设是 EC2 实例上已存在 vendor 文件夹,这就是它不安装新依赖项的原因。
为了暂时解决此问题,我从 .gitignore 中删除了 vendor 文件夹,运行
composer install
后,我将完整的 vendor 文件夹推送到存储库中,这次部署成功了。
我的问题是,这是在 composer.json 文件中更改依赖项后部署更改的唯一方法吗?如果不是,那么我们如何解决部署过程中产生的错误?
在 Elastic Beanstalk 上部署 Laravel 实用程序时,现在无需上传 Git 存储库上的整个
vendor
文件夹。现在通常不建议提交 vendor
文件夹,因为它可能会使您的存储库膨胀并导致目的模型冲突。
而是使用
更新本地计算机上的 Composer composer self-replace
然后更新
composer.json
然后运行
composer install
这将根据您对
composer.json
所做的更改使用最新的依赖项更新您的供应商目录。
然后提交
composer.json
和 composer.lock
:
git add composer.json composer.lock
git commit -m "Update composer.json and composer.lock"
git push
您的 Elastic Beanstalk 环境应配置为在部署期间运行 Composer。您已经创建了 .ebextensions 文件夹,但您需要确保您的环境设置正确,以便在部署过程中运行 Composer。
创建一个名为
.ebextensions/01-composer-install.config
的文件,其中包含以下内容:
container_commands:
01_update_composer:
command: "export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update"
02_install_dependencies:
command: "/usr/bin/composer.phar install --no-dev --optimize-autoloader"
Elastic Beanstalk 将使用更新的
composer.json
和 composer.lock
文件在部署期间安装必要的依赖项。