【问题标题】:Composer hanging while updating dependenciesComposer 在更新依赖项时挂起
【发布时间】:2015-12-10 23:50:20
【问题描述】:

我尝试使用 composer update 更新我今天正在处理的 Laravel 项目

但它挂在Updating dependencies (including require-dev)

所以我尝试了更新作曲家、转储自动加载等方法,但似乎没有任何效果。然后我以详细模式运行它: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 的内容。

知道出了什么问题以及如何修复它以便进行更新吗?

这是我的 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" $*

不知道该怎么办...

【问题讨论】:

  • 你的 composer.json 是什么样的?您之前尝试过作曲家自我更新吗?
  • 是的,我尝试了自我更新。我已经用 composer.json 更新了我的问题
  • 您可以运行composer diagnose 来检查您是否有任何连接问题
  • 谢谢,我不知道。 composer diagnose 给了我一些改进 composer.json 的建议,但没有任何建议可以改变问题。

标签: json composer-php hamcrest


【解决方案1】:

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

composer update -vvv

【讨论】:

  • 这对我来说是解决方案,它只需要一段时间而没有给出任何关于它正在做什么的输出。因此认为在这种情况下它可能会停止。
  • 最好的方法,因为我们会知道出了什么问题!
  • 谢谢。这个真的很有道理。
  • 出于某种原因,composer 与 pip 不同,它会下载整个包列表,这可能需要很长时间。
【解决方案2】:

所以问题出在 php 的 xdebug 扩展上。在我的php.ini 中禁用它后,composer 运行没有任何问题。

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

【讨论】:

  • 如果你不知道它为什么挂起,试试'composer diagnostic' cmd
  • 我将网络从 wifi 切换到移动网络,可能是缓存在路由器上,奇怪但有帮助
  • 对我来说,是 intellij 在调试端口上侦听导致问题 - 关闭 intellij 项目让 composer 正确更新。
  • 就是这样,谢谢克里斯!
【解决方案3】:

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

composer clear-cache

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

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

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

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

【讨论】:

  • 我总是必须每隔几周回到这个答案,composer clear-cache 每次都适合我。
  • 这很好@JaredDunham。另一种解决方法对于第一个选项不起作用的极少数情况很有用。实际上,我曾经在使用过小的虚拟机时遇到过这个问题。
【解决方案4】:

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

composer config --global repo.packagist composer https://packagist.org

【讨论】:

  • OMG ?️ 这些时间你在哪里?我不知道为什么它起作用了。我在没有上述命令的情况下尝试了composer require -vvv package_name,但我看到它正在使用https。但令我震惊的是,这两个命令实际上没有区别。
【解决方案5】:

对我来说,问题在于 xDebug。我正在使用 IDE 的终端,调试器正在监听传入的连接(一如既往)。关闭监听(无需禁用扩展)解决了这个问题。

【讨论】:

    【解决方案6】:

    为我工作。 首先运行自动加载命令,然后清除缓存并运行更新。

    composer dump-autoload
    php artisan cache:clear
    php artisan view:clear
    composer update
    

    【讨论】:

      【解决方案7】:

      我通过运行命令解决了它NOT IN VS CODE TERMINAL

      【讨论】:

        【解决方案8】:

        这对我有用:

        composer self-update
        

        【讨论】:

          【解决方案9】:

          重启系统。

          我今天遇到了同样的问题。按照建议,关闭了 xdebug,但没有帮助。验证所有文件都存在。重新启动了我的系统,它工作正常。

          【讨论】:

          • 你的意思是你优雅地重启了整个服务器?
          【解决方案10】:

          检查您是否正在运行所需的最低 php 版本

          与composer.json文件中指定的所需php版本比较

          打开终端运行

          php -v

          在 composer.json 文件中进行交叉检查,请参见下面的示例

          "require": { "php": "^7.1.3", }

          【讨论】:

            【解决方案11】:

            检查 php.ini 中 [xdebug] zend_extension = "file/path" 的路径

            【讨论】:

              【解决方案12】:

              我通过编辑 php.ini 文件解决了这个问题,以便设置 ssl 验证所需的 de cacert:

              1. 下载文件http://curl.haxx.se/ca/cacert.pem
              2. 编辑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
                
              3. 再试一次

              【讨论】:

              • 从瑞典黑客那里下载证书听起来不安全。
              • 这个特殊的瑞典黑客是 cURL 的创建者。如果我们不能相信他,我们就不能相信互联网上的任何东西:P
              • @IsakBerglind TIL cURL 只是在窃取我的信用卡信息以在 Valorant 上购买皮肤。
              【解决方案13】:

              我在另一篇文章中发现了这一点,我发现执行以下操作很有效。这似乎是作曲家包缓存中的缓存/下载问题。

              composer update -vvv

              然后执行以下操作: 添加或编辑您的作曲家文件以进行这些设置。

              "repositories": [
                  {
                       "type": "composer", 
                       "url": "https://packagist.org"
                  },
                  { "packagist": false }
              ]

              【讨论】:

                【解决方案14】:

                就我个人而言,我使用free 发现我的系统有 0kb 的交换存储空间。使用https://linuxize.com/post/create-a-linux-swap-file/ 创建一个 1GB 的交换文件立即解决了这个问题。

                【讨论】:

                • 请不要重复已有的答案
                猜你喜欢
                • 2017-11-10
                • 2014-04-21
                • 2014-05-26
                • 2019-06-12
                • 2021-06-05
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-06-20
                相关资源
                最近更新 更多