更新依赖项时,Composer挂起

Chr*_*ris 18 json hamcrest composer-php

我尝试更新我正在使用的Laravel项目 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
Run Code Online (Sandbox Code Playgroud)

我试着在packagist.org上搜索cordoval/hamcrest-php而找不到它.这不是我的依赖项composer.json

搜索我的供应商文件夹,我注意到mockery/mockery我使用的包需要hamcrest/hamcrest-php,但我找不到任何引用的包cordoval.

知道什么是错的,我怎么解决它,以便我可以做更新?

这是我的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"
}
Run Code Online (Sandbox Code Playgroud)

更新

我试过从composer.json中删除一些包,包括"mockery/mockery"包.它所做的唯一改变是Composer会挂在另一个文件上.

在离开Composer这么长时间之后,它最终会退出并出现如下错误:

/path/to/ComposerSetup/bin/composer: line 18:  1356 Segmentation fault      php "${dir}/composer.phar" $*
Run Code Online (Sandbox Code Playgroud)

不知道该怎么办......

Ons*_*hop 74

就我而言,它只是在我的 8GB ram Mac 上花费了很长时间。要检查进度并验证它是否正在通过依赖项,请在详细模式下运行 composer。这是我在问题中错过的一种方法,因此值得在此重申。

composer update -vvv
Run Code Online (Sandbox Code Playgroud)


Chr*_*ris 22

事实证明问题在于php的xdebug扩展.在我的禁用它后php.ini,作曲家运行没有任何问题.

而且需要注意的是,从缓存中读取文件时实际上并没有发生挂起.这是在作曲家尝试解决依赖关系之后的一步.它从未完成那一步,从未打印输出.这就是为什么无论我做什么,它似乎总是卡在缓存中读取文件.

  • 如果您不知道它为什么挂起,请尝试“作曲家诊断”cmd (7认同)
  • 对我来说,正是intellij在侦听调试端口上才引起了问题-关闭intellij项目使composer正确更新。 (2认同)

Dan*_*ouf 15

有时它会卡住,因为它试图使用 HTTP 而不是 https,所以只需运行它

composer config --global repo.packagist composer https://packagist.org
Run Code Online (Sandbox Code Playgroud)

  • 天哪 ️ 这些时间你在哪里?我不知道为什么它有效。我在没有上述命令的情况下尝试了“composer require -vvv package_name”,但我看到它使用的是“https”。但令我震惊的是这两个命令实际上没有区别。 (2认同)

man*_*bcd 13

首先:检查防火墙和代理连接.如果一切正常但作曲家仍然悬挂尝试清除作曲家缓存:

composer clear-cache
Run Code Online (Sandbox Code Playgroud)

https://getcomposer.org/doc/03-cli.md#clear-cache

第二个选项如果这些步骤没有修复你的作曲家,那么系统可能没有足够的RAM内存可用(我遇到了这个问题并且症状与你描述的相同).此时您有两个选择:

a)增加内存(虚拟机或Docker):您的容器或VM需要更多可用内存.请遵循以下指南:https: //stackoverflow.com/a/44533437/3518053

b)生成交换文件(Linux):尝试创建交换文件以提供更多内存:(上述命令来自更新时作曲家被杀死)

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
Run Code Online (Sandbox Code Playgroud)