ChatGPT解决这个技术问题 Extra ChatGPT

为什么作曲家在 300 秒后安装超时?

当我尝试在我的服务器上构建它时,我在 symfony2 中制作了一个小项目,它在解压缩 symfony 时总是失败。构建是好的,突然作曲家不会解压缩 symfony,我没有改变任何东西。我尝试使用 Jenkins 构建,也尝试从 bash 手动构建,结果相同。这不是权限问题,我的服务器上的互联网连接也正常。

Loading composer repositories with package information
Installing dependencies (including require-dev) from lock file
 - Installing symfony/symfony (v2.3.4)
 Downloading: 100%
[Symfony\Component\Process\Exception\ProcessTimedOutException]
The process "unzip '/path/vendor/symfony/symfony/6116f6f3
d4125a757858954cb107e64b' -d 'vendor/composer/b2f33269' && chmod -R u+w 'vendor/composer/b2f33269'" exceeded the timeout of 300 seconds.

N
Nicolai Fröhlich

尝试 composer update/install -o -vvv 并检查包是否从作曲家的缓存中加载。

如果是,请尝试清除作曲家的缓存或尝试添加 -cache-dir=/dev/null

要强制下载存档而不是克隆源,请将 --prefer-dist 选项与 --no-dev 结合使用。

否则,您可以尝试提高作曲家的进程超时值:

export COMPOSER_PROCESS_TIMEOUT=600   ( defaults to 300 )

使用 php composer.php install --prefer-dist --no-dev 对我有用。
也为我工作。有谁知道为什么?
过了一会儿,我弄清楚为什么会发生这种情况,原因是 NFS 速度慢。我不知道为什么,因为它在本地网络上,但是我切换到 sshfs 并且它可以正常工作。
一个常见的问题是当涉及到大量磁盘 i/o 时 NFS 共享速度很慢……即缓存文件夹受此影响。您可以通过将缓存文件夹移动到 /dev/shm/ 来解决此问题。对于作曲家,您可以使用 --cache-dir=/dev/shm/composer/cache。在 this article 中阅读有关它的更多信息,其中针对 symfony2 的性能技巧以及 vagrant nfs 共享。很高兴你解决了你的问题。您可能仍会考虑接受我的回答,因为 11 票赞成 + 评论清楚地表明它对其他人有帮助。
export COMPOSER_PROCESS_TIMEOUT=600(默认为 300)
A
Ali Motameni
composer config --global process-timeout 2000

如果你想在特定的 composer.json 中设置,或者不带 --global
r
riguang zheng

最简单的方法是在 composer.json 文件中添加配置选项,添加 process-timeout 0,仅此而已。它可以在任何地方工作。

{
  .....
  "scripts": {
    "start": "php -S 0.0.0.0:8080 -t public public/index.php"
  },
  "config": {
    "process-timeout":0
  }
}

从 composer 1.9 开始,您还可以在每个脚本的基础上禁用进程超时。例如。 "start": ["Composer\\Config::disableProcessTimeout","php -S 0.0.0.0:8080 -t public public/index.php"],
这就是@Ali Motameni 的答案为您所做的,以及答案下的评论所做的(@morris4)。它们实际上都为您更改了相应的 composer.json 文件,更改了此配置值。一个在您的全局 composer.json 文件中更改它,而来自注释的一个在当前项目的 composer.json 文件中更改它。
T
Tahir Yasin

Composer 本身对允许远程 git 操作的时间有限制。查看 Composer documentation 确认环境变量 COMPOSER_PROCESS_TIMEOUT 控制着这一点。该变量设置为默认值 300(秒),这对于使用慢速 Internet 连接的大型克隆操作显然是不够的。

使用以下方法提高此值:

COMPOSER_PROCESS_TIMEOUT=2000 composer install

w
wormhit

删除作曲家缓存对我有用。

rm -rf ~/.composer/cache/*

H
Hadi Sharghi

这是一个旧线程,但我发现超时的原因是运行 php 调试器(PHPStorm 正在侦听 xdebug 连接)导致进程超时。当我关闭 PHPStorm 或禁用 xdebug 扩展时,没有发生超时。


这确实是我超时的原因,VS Code 正在调试,我让它监听连接......
D
Daydream Nation

旧线程但对我来说是新问题。尝试在 Windows 10 主机内的 Ubuntu VM 上安装 google/apiclient(在 google/apiclient-services 上失败)时,此处没有解决方案。

在执行此作曲家安装/更新时注意到 Windows 的“反恶意软件可执行文件”占用了相当多的 CPU 周期后,我在 Windows 10 机器上禁用了“实时保护”,我的作曲家更新/安装工作!

希望对某人有所帮助。


它帮助了我!我在通过 VirtualBox 在 Windows 10 上运行的 Ubuntu VM 上安装 google/apiclient 时遇到了完全相同的问题,这解决了这个问题。
即使在 Windows 11 上,这似乎也有助于解决这个问题。您可以随时重新启用该设置,或者让它自行重新打开。
我在使用 ubuntu 的 Windows 10 中有一个 docker,我在使用 google/apiclient 时遇到了同样的问题,我禁用了反恶意软件实时保护,它对我有用
M
Mahmoud Zalt

Symfony 组件的进程超时默认设置为 60。这就是为什么你会得到这样的错误:

[Symfony\Component\Process\Exception\ProcessTimedOutException]     
The process "composer update" exceeded the timeout of 60 seconds. 

解决方案

将超时设置为 5 分钟或更长时间

$process = new Process("composer update");
$process->setTimeout(300); // 5 minutes
$process->run();

问题中的代码段显示 exceeded the timeout of 300 seconds。所以它要么需要高于 300,否则超时不是问题(根据@nifr 和@wormhit 的答案,可能是缓存问题)。
M
Michael Kiarie

我同意上面的大部分建议,但我遇到了同样的问题,对我有用的是删除供应商文件夹并重新运行 composer install

问候


在本地还是在服务器上?
无论在哪里遇到问题
u
user3890355

这就是 NFS 慢的问题。 Composer 将缓存写入 NFS 目录。您必须全局安装 composer 并重写缓存路径。

这不起作用:

php composer.phar install

使用这个:

composer install

在此运行之前,您必须全局配置作曲家。看到这个https://getcomposer.org/doc/00-intro.md#globally

此外,您必须将此行添加到您的 config.json:

"config": {
    "cache-dir": "/var/cache/composer"
}

为我工作。


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅