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

Posted

技术标签:

【中文标题】为啥作曲家在 300 秒后安装超时?【英文标题】:Why composer install timeouts after 300 seconds?为什么作曲家在 300 秒后安装超时? 【发布时间】:2013-09-25 21:37:05 【问题描述】:

我有一个在 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.

【问题讨论】:

【参考方案1】:

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

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

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

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

export COMPOSER_PROCESS_TIMEOUT=600   ( defaults to 300 )

【讨论】:

井包被写入缓存。请参阅 pastebin,它对于评论 pastebin.com/sb7deyNc 与更新命令相同的结果来说太大了。延长时间也无济于事,我认为它是 4 核机器,几乎无法正常工作。 使用 php composer.php install --prefer-dist --no-dev 对我有用。 也适合我。有谁知道为什么 后来我弄清楚为什么会发生这种情况,原因是 NFS 速度慢。我不知道为什么,因为它在本地网络上,但我切换到 sshfs 并且它可以正常工作。 一个常见的问题是 NFS 共享在涉及大量磁盘 i/o 时速度很慢......即缓存文件夹受此影响。您可以通过将缓存文件夹移动到 /dev/shm/ 来解决此问题。对于作曲家,您可以使用--cache-dir=/dev/shm/composer/cache。在 this article 中阅读有关它的更多信息,其中针对 symfony2 的性能技巧以及 vagrant nfs 共享。很高兴你解决了你的问题。您可能仍然会考虑接受我的回答,因为 11 票赞成 + cmets 明确表示它对其他人有帮助。【参考方案2】:
composer config --global process-timeout 2000

【讨论】:

如果你想在特定的 composer.json 中设置,或者不带 --global 【参考方案3】:

最简单的方法是在 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 文件中。【参考方案4】:

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

使用以下方法提高该值:

COMPOSER_PROCESS_TIMEOUT=2000 composer install

【讨论】:

【参考方案5】:

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

rm -rf ~/.composer/cache/*

【讨论】:

【参考方案6】:

默认情况下,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();

【讨论】:

问题中的 sn-p 表示 exceeded the timeout of 300 seconds。所以它要么需要高于 300,否则超时不是问题(根据@nifr 和 @wormhit 的回答,可能是缓存问题)。【参考方案7】:

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

【讨论】:

这确实是我超时的原因,VS Code 正在调试,我让它监听连接...【参考方案8】:

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

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

希望对某人有所帮助。

【讨论】:

它帮助了我!我在通过 VirtualBox 在 Windows 10 上运行的 Ubuntu VM 上安装 google/apiclient 时遇到了完全相同的问题,这解决了问题。 即使在 Windows 11 上,这似乎也有助于解决这个问题。您可以随时重新启用该设置,或者让它自行重新开启。【参考方案9】:

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

问候

【讨论】:

【参考方案10】:

这是 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"

为我工作。

【讨论】:

以上是关于为啥作曲家在 300 秒后安装超时?的主要内容,如果未能解决你的问题,请参考以下文章

等待设备时出错:等待模拟器上线 300 秒后超时

等待所有设备上线 -> 等待设备时出错:等待模拟器上线 300 秒后超时

为啥作曲家包不安装

60秒后Apache Web服务器超时

为啥我在作曲家安装后在 Laravel 中收到 500 服务器错误 [关闭]

PHPUnit在空缓存上运行超时