Php - 实例部署无法安装 Composer 依赖项

问题描述 投票:0回答:1

我刚刚开始学习 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 文件中更改依赖项后部署更改的唯一方法吗?如果不是,那么我们如何解决部署过程中产生的错误?

php laravel amazon-elastic-beanstalk
1个回答
0
投票

在 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
文件在部署期间安装必要的依赖项。

© www.soinside.com 2019 - 2024. All rights reserved.