新 EC2 实例 (Elastic Beanstalk) 上的 Composer 失败

Posted

技术标签:

【中文标题】新 EC2 实例 (Elastic Beanstalk) 上的 Composer 失败【英文标题】:Composer Failing on New EC2 Instance (Elastic Beanstalk) 【发布时间】:2018-08-31 07:40:01 【问题描述】:

我管理一个几年前的应用程序,我不是最初的开发者。

该网站自 2014 年底以来一直在 AWS EB 上运行 - 使用 laravel 4。

今天,AWS 终止了我的 ec2 实例,因为该盒子的类型即将退役。新实例生成没有问题,但应用程序没有运行。

当我尝试部署应用程序的某个版本(通过 zip)时,我收到以下错误:

[实例:i-03441954f29775f02] 实例上的命令失败。返回 代码:1 输出: [CMD-AppDeploy/AppDeployStage0/AppDeployPreHook/10_composer_install.sh] 命令失败,错误代码为 1: /opt/elasticbeanstalk/hooks/appdeploy/pre/10_composer_install.sh ++ /opt/elasticbeanstalk/bin/get-config 容器 -k app_staging_dir + EB_APP_STAGING_DIR=/var/app/ondeck + cd /var/app/ondeck + '[' -f composer.json ']' + 导出 COMPOSER_HOME=/root + COMPOSER_HOME=/root + '[' -d 供应商']' ++ /opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:container:php:phpini -o composer_options + PHP_COMPOSER_OPTIONS= + echo '找到 composer.json 文件。试图安装供应商。找到 composer.json 文件。 尝试安装供应商。 + composer.phar 安装 --no-ansi --no-interaction [UnexpectedValueException] .

不幸的是,在过去的 4 到 5 年里,我并没有成为一名 PHP 开发人员,所以我有点困惑从哪里开始。这似乎是文件本身的问题,这就是我所拥有的:


  "name": "laravel/laravel",
  "description": "The Laravel Framework.",
  "keywords": ["framework", "laravel"],
  "license": "MIT",
  "require": 
    "laravel/framework": "4.2.*",
    "zizaco/confide": "~4.0@dev",
    "dollar/generators": "dev-master",
    "anahkiasen/former": "dev-master",
    "guzzlehttp/guzzle": "~4.0",
    "rhumsaa/uuid": "~2.7",
    "aws/aws-sdk-php-laravel": "1.*",
    "nesbot/Carbon": "*",
    "maatwebsite/excel": "1.*",
    "mandrill/mandrill": "1.0.*",
    "barryvdh/laravel-snappy": "0.1.x",
    "h4cc/wkhtmltopdf-amd64": "0.12.0",
    "davibennun/laravel-raygun": "dev-master",
    "dchesterton/marketo-rest-api": "^0.0.5"
  ,
  "autoload": 
    "classmap": [
      "app/commands",
      "app/controllers",
      "app/models",
      "app/database/migrations",
      "app/database/seeds",
      "app/tests/TestCase.php"
    ]
  ,
  "scripts": 
    "post-install-cmd": [
      "php artisan clear-compiled",
      "php artisan optimize"
    ],
    "post-update-cmd": [
      "php artisan clear-compiled",
      "php artisan optimize"
    ],
    "post-create-project-cmd": [
      "php artisan key:generate"
    ]
  ,
  "config": 
    "preferred-install": "dist"
  ,
  "minimum-stability": "stable"

除此之外,我不确定是否需要对 EC2 盒子本身做些什么。我会说服务器在过去已经重新生成 - 可能不会 2 年左右,没有问题。

这些是来自 EB 的服务器规格。

运行 PHP 5.5 的 64 位 Amazon Linux 2014.09 v1.0.9

【问题讨论】:

尝试一些原始包,如 (single sdk),以隔离问题。如果服务正常,则说明作曲家配置错误。 【参考方案1】:

这个问题也发生在我身上,在深入研究/var/log/eb-activity.log(您必须通过 ssh 进入您的实例才能访问此日志文件)后,我发现我的 composer.json 中的一些包需要 PHP 版本 7.3 和在我的实例中,我有 PHP 7.2。

我为解决这个问题所做的是将依赖项(在我的例子中是 laravel-websockets)从 1.3 降级到 1.2,因为目前弹性 beanstalk 不支持 PHP 7.3。

但如果是这种情况,您也可以升级您的 PHP 版本。

要想真正知道是什么问题,最好访问日志文件/var/log/eb-activity.log

【讨论】:

以上是关于新 EC2 实例 (Elastic Beanstalk) 上的 Composer 失败的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Elastic Beanstalk 中为 Auto Scaling EC2 实例配置触发器?

Elastic Beanstalk 终止我的 EC2 实例

Elastic beanstalk Auto Scaling - 多长时间启动一个新实例

找出与 Elastic Beanstalk 应用程序关联的 EC2 实例?

如何以编程方式更改 Elastic Beanstalk 环境中的 EC2 实例类型?

Elastic Beanstalk:在同一可用区创建 EC2 和 RDS 实例