通过Composer安装或更新symfony/flex失败,没有报错信息

6

我有一个使用Symfony/Flex的项目,无法运行composer installcomposer update。我也不能创建一个以Symfony/Flex作为依赖项的新Composer项目,因为失败情况是相同的。例如:

mkdir foo && cd foo && composer require symfony/flex -vvv

始终具有以下输出;

...
Package operations: 1 install, 0 updates, 0 removals
Installs: symfony/flex:v1.2.6
  - Installing symfony/flex (v1.2.6): Reading /Users/me/.composer/cache/files/symfony/flex/17b622276922e6347ea129acd6238ae1c41d96b6.zip from cache
Loading from cache
 Extracting archiveExecuting command (CWD): unzip -qq  '/Users/me/projects/foo/vendor/symfony/flex/2064a553f7cdf064ba8c1b62c7087ec6' -d '/Users/me/projects/foo/vendor/composer/65215880'
Loading plugin Symfony\Flex\Flex
Downloading https://flex.symfony.com/versions.json

在下载 versions.json 的过程中,下载会在几秒钟内挂起,然后默默地失败。 "vendor/symfony/flex" 已存在。
这个失败的原因可能是什么?我的同事可以成功运行相同的命令,所以我认为问题出在我本地的composer上。我尝试重新安装composer并清除缓存,但没有成功。
编辑:现在在现有项目中运行 “composer update -vvv” 时,我会得到以下输出
...
Downloading https://repo.packagist.org/packages.json

同时也出现了挂起的情况,因此看起来composer无法下载某些JSON文件?软件包可以正常下载,因此似乎不是因为网络不佳。

编辑 2:我还可以确认,在现有项目中使用composer update --no-plugins确实有效。


尝试进入一个新目录并执行 composer install,然后按照步骤进行。 - weegee
@weegee 我不明白你的意思。 - Chris Brown
在 foo 中创建一个空文件夹,例如 Test。然后执行 cd Test 命令,接着执行 composer install 命令。 - weegee
哦,我明白了 - 出现了相同的问题。 - Chris Brown
我的ISP弄错了IPv6,我不得不在我的机器上禁用它才能连接到Composer。 - ceejayoz
5个回答

18

当Composer无法按预期工作时,您应该像这样重置并更新它。首先

$ composer clearcache

然后更新

$ composer self-update

然后运行诊断。

$ composer diagnose

然后cd到您的composer.json所在的位置,执行以下操作:

$ composer dump-autoload

那么

$ composer install

应该修复这个问题。另一个方法包括

$ composer update symfony/flex --no-plugins --no-scripts

同时,这可能是由于 symfony/flexsymfony/symfony 之间的冲突引起的。要解决这个问题,请按照以下步骤操作。

$ composer remove symfony/symfony

然后编辑您的composer.json文件,如下所示:

{
    "require": {
        "symfony/flex": "^1.0",
     },
     "conflict": {
         "symfony/symfony": "*"
    }
}

很遗憾,它仍然会卡在 Downloading https://flex.symfony.com/versions.json 并且悄无声息地失败。只有使用 --no-plugins 才能让安装运行。 - Chris Brown
好的,请尝试进入一个新目录(空目录),然后运行这些命令,然后执行composer install。也请检查您的互联网连接。检查是否有任何vendor文件夹。 - weegee
你是否已经安装了Symfony/Symfony?也许这就是问题所在。 - weegee
我编辑了我的回答。现在请检查@ChrisBrown。 - weegee
再次强调,我只在新文件夹中进行测试时安装了symfony/flex(并且在现有项目中也是如此),symfony/symfony未在任何位置安装。 - Chris Brown
显示剩余5条评论

7

旧的Flex基础设施正在关闭,您需要将Flex更新至至少1.17.1版本:symfony.com/blog/upgrade-flex-on-your-symfony-projects

为此,您需要运行以下命令:

composer update symfony/flex --no-plugins --no-scripts

2

运行此命令,解决了我的问题。

> composer update symfony/flex --no-plugins --no-scripts

然后将此配置保存在我的composer.json文件中。

  {
    "require": {
        "symfony/flex": "^1.1",
     },
     "conflict": {
         "symfony/symfony": "*"
     }
  }

1

由于我的经验与同样的问题有关,因此不值得独立回答,我将把它作为答案发布在这里,因为核心问题完全相同,即Symfony flex服务器被关闭。

在我的Docker项目中,构建期间未安装依赖项,经过一些调查,我发现,composer install总是失败,因为无法访问Symfony flex服务器。起初看起来像是DNS问题,但最终发现是Symfony flex服务器被关闭以及"symfony/flex"在composer.json中的旧版本(1.3)的问题。

我几乎做了最受欢迎的答案中的所有内容,但是...

$ composer update symfony/flex --no-plugins --no-scripts

由于symfony/flex包的依赖项达到了API限制,导致出现错误。但是,根据建议,我创建了一个个人访问令牌,从那时起一切顺利进行。


-2

我遇到了同样的问题。

我将Cloudflare DNS 1.1.1.1添加到我的DNS中。

这对我解决了问题。


1
这不是正确的解决方案,你只是在使用过期的DNS缓存,它很快就会过期。旧的Flex基础设施正在关闭,您需要更新Flex:https://symfony.com/blog/upgrade-flex-on-your-symfony-projects - Alessandro Lai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接