【问题标题】:Composer crashes when it tries to Resolve dependenciesComposer 在尝试解决依赖关系时崩溃
【发布时间】:2019-12-17 09:19:15
【问题描述】:

我正在尝试使用 Composer 在运行 PHP 5.6.40 的 Docker 容器中安装依赖项。

它运行,但退出并且供应商目录始终为空。

MacBook:my-app dev$ docker exec my-app_php56_1 php -d memory_limit=-1 composer.phar update -vvv --no-cache --no-plugins
Disabling cache usage
Running 1.9.0 (2019-08-02 20:55:32) with PHP 5.6.40 on Linux / 4.9.184-linuxkit
Do not run Composer as root/super user! See https://getcomposer.org/root for details
Reading ./composer.json
Loading config file ./composer.json
Checked CA file /etc/ssl/certs/ca-certificates.crt: valid
Executing command (/var/www/html): git branch --no-color --no-abbrev -v
Reading /root/.composer/composer.json
Loading config file /root/.composer/composer.json
Loading composer repositories with package information
Downloading https://repo.packagist.org/packages.json
Updating dependencies (including require-dev)
Downloading http://repo.packagist.org/p/provider-2013%24b962a943715f142bd3c36c0e87b67b28b16c014a98898622ec735220b7e1ee4f.json
Downloading http://repo.packagist.org/p/provider-2014%24ecc1513d9762efcfd48fdbaf4a08f829a59093064f40b7c351f93f3fbdd07973.json
Downloading http://repo.packagist.org/p/provider-2015%24258303eff7165b17439353fe44e501a3a6d600bd5b5482c5261a2ffa2234a947.json
Downloading http://repo.packagist.org/p/provider-2016%2496e2313b5ba90c2b798b03f9e306a27c15f11f763cd6478b834943fc128fc111.json
Downloading http://repo.packagist.org/p/provider-2017%24d2ad294ebaf381b7bf68cacbe514cf2bb33c3a919b97319bfa2e2ffaa66bc511.json
Downloading http://repo.packagist.org/p/provider-2018%2466893d07acdb18bb12d5e92e062b6e3058f5d284292b09cf585bf0ceb1b26aca.json
Downloading http://repo.packagist.org/p/provider-2018-10%24ff53e18093ae3e52a84c5567489c78bf1d82d0af80f413c3d6ad35d541a28434.json
Downloading http://repo.packagist.org/p/provider-2019-01%2431194ef7551ee4bffd7cc09dd6d01dc60848afc129544438ac7931e9d42dd54e.json
...
Downloading http://repo.packagist.org/p/phpspec/phpspec%248dc959bd0ae544f84e5bceee933d9a61d0a2074b208c3b7e7807cdc320e83eee.json
Downloading http://repo.packagist.org/p/phpspec/php-diff%249b8687b7c99f069823a9ac8d17900f9c8243368ceea9a5ac4e71ab424bb6f2d5.json
Downloading http://repo.packagist.org/p/squizlabs/php_codesniffer%24386b3726c6c3ce5edde180a7881f924be5dfd720c951dc93db8455ae871e9d61.json
MacBook:my-app dev$

然后它什么也不返回,并且供应商目录保持为空。

我正在运行没有任何插件或缓存的作曲家。

最后,完全相同的 composer.json 文件在我的另一个 PHP 7.1.x 容器中运行良好。

我还想知道最终依赖项是否导致问题,因此尝试将其删除。还是没有运气。

编辑:

我现在回到我的 PHP 7.1 容器并运行完全相同的脚本,它工作正常。 Composer 的输出是(所以 5.6 版本只是在它执行“通过 SAT 解决依赖关系”时死亡:

...
Downloading http://repo.packagist.org/p/webmozart/assert%24f23cf2d90bee4a1a09dc1d005896d60e715bdb9ecd4531874bfc3dd3ea5908c1.json
Downloading http://repo.packagist.org/p/phpspec/phpspec%248dc959bd0ae544f84e5bceee933d9a61d0a2074b208c3b7e7807cdc320e83eee.json
Downloading http://repo.packagist.org/p/phpspec/php-diff%249b8687b7c99f069823a9ac8d17900f9c8243368ceea9a5ac4e71ab424bb6f2d5.json
Downloading http://repo.packagist.org/p/squizlabs/php_codesniffer%24386b3726c6c3ce5edde180a7881f924be5dfd720c951dc93db8455ae871e9d61.json
Resolving dependencies through SAT
Looking at all rules.
Something\'s changed, looking at all rules again (pass #16)
Dependency resolution completed in 28.879 seconds
Analyzed 21713 packages to resolve dependencies
Analyzed 1376894 rules to resolve dependencies
Resolving dependencies through SAT
Looking at all rules.

Dependency resolution completed in 0.003 seconds
Package operations: 116 installs, 0 updates, 0 removals
Installs: kylekatarnls/update-helper:1.2.0, stripe/stripe-php:v2.3.0, abraham/twitteroauth:0.6.6, ralouphie/getallheaders:3.0.3, psr/http-message:1.0.1, guzzlehttp/psr7:1.6.1, guzzlehttp/promises:v1.3.1, guzzlehttp/guzzle:6.0.2, maknz/slack:1.7.0, maknz/slack-laravel:1.0.0, sabberworm/php-css-parser:8.1.0, phenx/php-svg-lib:v0.3.2, phenx/php-font-lib:0.5.1, dompdf/dompdf:v0.8.3, vlucas/phpdotenv:v1.1.1
...
etc for everything else 

【问题讨论】:

  • 你试过composer install而不是更新吗?
  • 另外,当您进行安装时,将-vvv 标志添加到末尾以增加详细信息。你可能会这样看待你的问题。
  • 'Install' 从锁定文件中引入特定的包。但是我的锁定文件确实包含此版本 PHP 的正确包
  • 谢谢,是的,-vvv 与 --no-cache --no-plugins 一起在我的命令中 :-( 如您所见,我已经尝试了一切
  • 在运行安装/更新之前删除锁定文件

标签: php laravel docker composer-php


【解决方案1】:

从您的运行输出来看,您的作曲家设置似乎使用的是http,而不是https。在安装 composer 之前运行这个命令:

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

【讨论】:

  • @rob006 该命令由 GitHub 上作曲家项目的贡献者 (github.com/composer/composer/issues/5656) 提供。在为我的网站更新作曲家并且不到一周前使用它时,我仍然遇到下载问题。它仍然按原样工作。不管怎么说,多谢拉。下次我更新作曲家时,我会试试你的建议。
  • 这是一条旧评论 - 同时存储库的 URL 已更改为 https://repo.packagist.org
  • @rob006,你以前用过这个命令吗?请问,我是客观地问这个问题。仔细查看命令,它包含repo.packagist 指代一个子域。它还包含packagist.org,它是主域。同样,repo.packagist.orgpackagist.org 下的子域。我坚持说我不到一周前使用了这个命令,它解决了我的作曲家问题。我没有重复任何cmets。我经常更新我的 Laravel 网站。
  • 子域无关紧要 - repo.packagist.org 指向与 packagist.org 不同的服务器。 packagist.org 在 BC 之前可能仍然有效,但将来可能会改变 - repo.packagist.org 现在是 repo.packagist 设置的正确域。见blog.packagist.com/an-update-on-packagist-org-hosting
  • 另外,我很乐意将提问者引导到我在问题的评论部分提出这个建议的帖子,但他的问题没有标记 TransportException 错误,我的回答也没有被接受。在此处查看帖子 (stackoverflow.com/questions/43996782/…)
【解决方案2】:

这个问题现在有点老了,所以我假设你已经解决了。我最近遇到了同样的问题。

问题似乎源于 PHP 版本的更改。就我而言,我是从 7.1 升级到 7.2,您认为这不会造成太大问题。

我的composer update -vvv --no-cache --no-plugins 输出会显示

Resolving dependencies through SAT
Looking at all rules.
Something's changed, looking at all rules again (pass #[forever increasing])

尝试安装symfony/thanks

最后我不得不从我的composer.json 中删除symfony/thanks 并再次运行。然后它给了我一些我也删除的其他软件包的问题。一旦成功运行,我就可以开始将有问题的包添加回我的composer.json,最终问题得到解决。

我认为根本问题是我的包的不同级别的依赖关系中存在许多冲突。

我想如果有人发现他们最终删除了越来越多的包,解决方案是从尽可能少的包开始(在我的例子中是默认的 Laravel composer.json)并开始一个接一个地添加新包。

【讨论】:

    猜你喜欢
    • 2020-01-20
    • 2015-11-29
    • 2013-11-02
    • 2013-11-26
    • 2021-06-04
    • 2016-10-15
    • 2020-10-07
    • 2014-12-18
    • 1970-01-01
    相关资源
    最近更新 更多