Composer 在更新依赖项时挂起
Composer hanging while updating dependencies
我尝试使用 composer update
更新我今天正在处理的 Laravel 项目
但它挂在 Updating dependencies (including require-dev)
所以我尝试了更新 composer、dump-autoload 等方法,但似乎没有任何效果。然后我 运行 它处于详细模式:composer update -vvv
我注意到它在阅读这篇文章时挂起 json:
Reading path/to/Composer/repo/https---packagist.org/provider-cordoval$hamcrest-php.json from cache
我尝试在 packagist.org 上搜索 cordoval/hamcrest-php,但找不到。这未在我的 composer.json
中列为依赖项
搜索我的供应商文件夹,我注意到我使用的 mockery/mockery
包需要 hamcrest/hamcrest-php
,但我找不到任何引用 cordoval
.[=20 的内容=]
知道出了什么问题以及如何修复它以便我可以进行更新吗?
这是我的 composer.json:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
"laravel/framework": "4.2.*",
"iron-io/iron_mq": "dev-master",
"phpunit/phpunit": "4.2.*",
"mockery/mockery": "dev-master",
"xethron/migrations-generator": "dev-master",
"mailgun/mailgun-php": "dev-master"
},
"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"
}
更新
我已经尝试从 composer.json 中删除一些包,包括 "mockery/mockery" 包。它所做的唯一更改是 Composer 会挂在不同的文件上。
像这样离开 Composer 运行 很长时间后,它最终退出并出现如下错误:
/path/to/ComposerSetup/bin/composer: line 18: 1356 Segmentation fault php "${dir}/composer.phar" $*
不知道该怎么办...
原来问题出在 php 的 xdebug
扩展名上。在我的 php.ini
中禁用它后,作曲家 运行 没有任何问题。
请注意,挂断实际上并不是在从缓存中读取文件时发生的。这是作曲家试图解决依赖关系之后的步骤。它只是从未完成该步骤并且从未打印输出。这就是为什么无论我做什么,它似乎总是卡在从缓存中读取文件。
第一步: 检查防火墙和代理连接。如果一切正常但作曲家仍然挂起尝试清除作曲家缓存:
composer clear-cache
https://getcomposer.org/doc/03-cli.md#clear-cache
第二个选项 如果这些步骤没有修复您的作曲家,那么系统可能没有足够的 RAM 内存可用(我遇到了这个问题并且症状与你描述)。此时你有两个选择:
a) 增加内存(虚拟机或 Docker): 您的容器或 VM 需要更多可用内存。请遵循此指南:
b) 生成交换文件 (Linux) : 尝试创建交换文件以提供更多内存:
(以上命令来自composer killed while updating)
free -m
mkdir -p /var/_swap_
cd /var/_swap_
#Here, 1M * 2000 ~= 2GB of swap memory
dd if=/dev/zero of=swapfile bs=1M count=2000
mkswap swapfile
swapon swapfile
chmod 600 swapfile
echo "/var/_swap_/swapfile none swap sw 0 0" >> /etc/fstab
#cat /proc/meminfo
free -m
重新启动系统。
我今天遇到了同样的问题。按照建议,关闭 xdebug,但没有帮助。验证所有文件都存在。重新启动我的系统,它工作了。
检查您是否运行正在使用最低要求的php版本
与composer.json文件中指定的php版本比较
打开终端运行
php -v
交叉签入 composer.json 文件参见下面的示例
"require": {
"php": "^7.1.3",
}
为我工作。
首先 运行 命令自动加载,然后清除缓存和 运行 更新。
composer dump-autoload
php artisan cache:clear
php artisan view:clear
composer update
检查 [xdebug] zend_extension = "file/path" 在 php.ini
中的路径
对我来说,问题出在 xDebug 上。我正在使用 IDE 的终端,调试器正在监听传入的连接(一如既往)。关闭监听(无需禁用扩展)解决了这个问题。
我通过编辑 php.ini
文件解决了这个问题,以便设置 ssl 验证所需的 de cacert:
- 下载文件http://curl.haxx.se/ca/cacert.pem
编辑php.ini
设置拍拍:
[openssl]
; The location of a Certificate Authority (CA) file on the local filesystem
; to use when verifying the identity of SSL/TLS peers. Most users should
; not specify a value for this directive as PHP will attempt to use the
; OS-managed cert stores in its absence. If specified, this value may still
; be overridden on a per-stream basis via the "cafile" SSL stream context
; option.
openssl.cafile=C:\web\certs\cacert.pem
curl.cainfo=C:\web\certs\cacert.pem
再试一次
我通过 运行 命令解决了它 NOT IN VS CODE TERMINAL
就我而言,这只是在我的 8GB 内存上花费了很长时间 Mac。要检查进度并验证它是否正在处理依赖项,运行 composer 处于详细模式。这是我在问题中错过的一种方法,因此值得在这里重新说明。
composer update -vvv
我在另一篇文章中发现了这一点,我发现执行以下操作很有效。这似乎是作曲家包缓存中的一个 cache/download 问题。
composer update -vvv
然后执行以下操作:
添加或编辑您的作曲家文件以具有这些设置。
"repositories": [
{
"type": "composer",
"url": "https://packagist.org"
},
{ "packagist": false }
]
有时它会卡住,因为它试图使用 HTTP 而不是 https,所以只需 运行 这个
composer config --global repo.packagist composer https://packagist.org
这对我有用:
composer self-update
就个人而言,我发现使用 free
我的系统有 0kb 的交换存储空间。使用 https://linuxize.com/post/create-a-linux-swap-file/ 创建一个 1GB 交换文件立即解决了问题。
我尝试使用 composer update
但它挂在 Updating dependencies (including require-dev)
所以我尝试了更新 composer、dump-autoload 等方法,但似乎没有任何效果。然后我 运行 它处于详细模式:composer update -vvv
我注意到它在阅读这篇文章时挂起 json:
Reading path/to/Composer/repo/https---packagist.org/provider-cordoval$hamcrest-php.json from cache
我尝试在 packagist.org 上搜索 cordoval/hamcrest-php,但找不到。这未在我的 composer.json
搜索我的供应商文件夹,我注意到我使用的 mockery/mockery
包需要 hamcrest/hamcrest-php
,但我找不到任何引用 cordoval
.[=20 的内容=]
知道出了什么问题以及如何修复它以便我可以进行更新吗?
这是我的 composer.json:
{
"name": "laravel/laravel",
"description": "The Laravel Framework.",
"keywords": ["framework", "laravel"],
"license": "MIT",
"require": {
"laravel/framework": "4.2.*",
"iron-io/iron_mq": "dev-master",
"phpunit/phpunit": "4.2.*",
"mockery/mockery": "dev-master",
"xethron/migrations-generator": "dev-master",
"mailgun/mailgun-php": "dev-master"
},
"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"
}
更新
我已经尝试从 composer.json 中删除一些包,包括 "mockery/mockery" 包。它所做的唯一更改是 Composer 会挂在不同的文件上。
像这样离开 Composer 运行 很长时间后,它最终退出并出现如下错误:
/path/to/ComposerSetup/bin/composer: line 18: 1356 Segmentation fault php "${dir}/composer.phar" $*
不知道该怎么办...
原来问题出在 php 的 xdebug
扩展名上。在我的 php.ini
中禁用它后,作曲家 运行 没有任何问题。
请注意,挂断实际上并不是在从缓存中读取文件时发生的。这是作曲家试图解决依赖关系之后的步骤。它只是从未完成该步骤并且从未打印输出。这就是为什么无论我做什么,它似乎总是卡在从缓存中读取文件。
第一步: 检查防火墙和代理连接。如果一切正常但作曲家仍然挂起尝试清除作曲家缓存:
composer clear-cache
https://getcomposer.org/doc/03-cli.md#clear-cache
第二个选项 如果这些步骤没有修复您的作曲家,那么系统可能没有足够的 RAM 内存可用(我遇到了这个问题并且症状与你描述)。此时你有两个选择:
a) 增加内存(虚拟机或 Docker): 您的容器或 VM 需要更多可用内存。请遵循此指南:
b) 生成交换文件 (Linux) : 尝试创建交换文件以提供更多内存: (以上命令来自composer killed while updating)
free -m
mkdir -p /var/_swap_
cd /var/_swap_
#Here, 1M * 2000 ~= 2GB of swap memory
dd if=/dev/zero of=swapfile bs=1M count=2000
mkswap swapfile
swapon swapfile
chmod 600 swapfile
echo "/var/_swap_/swapfile none swap sw 0 0" >> /etc/fstab
#cat /proc/meminfo
free -m
重新启动系统。
我今天遇到了同样的问题。按照建议,关闭 xdebug,但没有帮助。验证所有文件都存在。重新启动我的系统,它工作了。
检查您是否运行正在使用最低要求的php版本
与composer.json文件中指定的php版本比较
打开终端运行
php -v
交叉签入 composer.json 文件参见下面的示例
"require": {
"php": "^7.1.3",
}
为我工作。 首先 运行 命令自动加载,然后清除缓存和 运行 更新。
composer dump-autoload
php artisan cache:clear
php artisan view:clear
composer update
检查 [xdebug] zend_extension = "file/path" 在 php.ini
中的路径对我来说,问题出在 xDebug 上。我正在使用 IDE 的终端,调试器正在监听传入的连接(一如既往)。关闭监听(无需禁用扩展)解决了这个问题。
我通过编辑 php.ini
文件解决了这个问题,以便设置 ssl 验证所需的 de cacert:
- 下载文件http://curl.haxx.se/ca/cacert.pem
编辑
php.ini
设置拍拍:[openssl] ; The location of a Certificate Authority (CA) file on the local filesystem ; to use when verifying the identity of SSL/TLS peers. Most users should ; not specify a value for this directive as PHP will attempt to use the ; OS-managed cert stores in its absence. If specified, this value may still ; be overridden on a per-stream basis via the "cafile" SSL stream context ; option. openssl.cafile=C:\web\certs\cacert.pem curl.cainfo=C:\web\certs\cacert.pem
再试一次
我通过 运行 命令解决了它 NOT IN VS CODE TERMINAL
就我而言,这只是在我的 8GB 内存上花费了很长时间 Mac。要检查进度并验证它是否正在处理依赖项,运行 composer 处于详细模式。这是我在问题中错过的一种方法,因此值得在这里重新说明。
composer update -vvv
我在另一篇文章中发现了这一点,我发现执行以下操作很有效。这似乎是作曲家包缓存中的一个 cache/download 问题。
composer update -vvv
然后执行以下操作: 添加或编辑您的作曲家文件以具有这些设置。
"repositories": [
{
"type": "composer",
"url": "https://packagist.org"
},
{ "packagist": false }
]
有时它会卡住,因为它试图使用 HTTP 而不是 https,所以只需 运行 这个
composer config --global repo.packagist composer https://packagist.org
这对我有用:
composer self-update
就个人而言,我发现使用 free
我的系统有 0kb 的交换存储空间。使用 https://linuxize.com/post/create-a-linux-swap-file/ 创建一个 1GB 交换文件立即解决了问题。