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


72

当我尝试在服务器上构建它时,我在symfony2中制作了一个小项目,在解压缩symfony时总是失败。构建还可以,作曲家突然不会解压缩symfony,我也没有做任何更改。我尝试使用Jenkins进行构建,也尝试从bash手动进行构建,结果相同。这不是权限问题,服务器上的Internet连接也可以。

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.

Answers:


109

尝试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与update命令相同的结果而言,它太大了。而且延长时间也无济于事,我认为它是4核计算机,而且几乎无法正常工作。
zajca 2013年

2
使用php composer.php install --prefer-dist --no-dev对我有用。
Rubens Mariuzzo

2
也为我工作。有人知道为什么吗?
hek2mgl

1
很久以后,我弄清楚了为什么会这样,原因是NFS缓慢。我不知道为什么,因为它在本地网络上,但是我切换到了sshfs,并且可以正常工作。
zajca 2014年

4
一个常见的问题是,在涉及大量磁盘I / O时,NFS共享速度很慢...即高速缓存文件夹受此影响。您可以通过将缓存文件夹移至来解决此问题/dev/shm/。在作曲家的情况下,您可以使用--cache-dir=/dev/shm/composer/cache。在本文中了解有关此内容的更多信息,该文章针对具有无所事事的nfs共享的symfony2的性能技巧。很高兴您解决了您的问题。您可能仍会考虑接受我的回答,因为11票赞成票+评论清楚地表明这对其他人有帮助。
NicolaiFröhlich2014年


42

最简单的方法是将配置选项添加到composer.json文件,添加进程超时0,仅此而已。它可以在任何地方工作。

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

5
从composer 1.9开始,您还可以基于每个脚本禁用进程超时。例如。"start": ["Composer\\Config::disableProcessTimeout","php -S 0.0.0.0:8080 -t public public/index.php"],
ttk

2
这就是@Ali Motameni的答案为您所做的事情,以及答案下的注释(通过@ morris4)。它们实际上都为您更改了相应的composer.json文件,从而更改了此配置值。一种是在全局composer.json文件中更改它,另一种是从注释中更改当前项目的composer.json文件中的。
still_dreaming_1 '20

26

Composer本身对允许远程git操作的时间施加了限制。看看Composer文档确认环境变量COMPOSER_PROCESS_TIMEOUT对此进行了控制。该变量设置为默认值300(秒),对于使用慢速Internet连接的大型克隆操作来说,这显然是不够的。

使用以下方法提高此值:

COMPOSER_PROCESS_TIMEOUT=2000 composer install

4

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

rm -rf ~/.composer/cache/*

4

默认情况下,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的回答,可能是缓存问题)。
肖恩·比恩

4

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


1
这确实是我超时的原因,VS Code正在调试,我让它监听连接…
Daniel Abbatt

2

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

在注意到Windows的“防恶意软件可执行文件”在执行此作曲工具安装/更新时占用了相当多的CPU周期后,我在Windows 10计算机上禁用了“实时保护”,并且我的作曲者更新/安装成功了!

希望能对某人有所帮助。


它帮助了我!我通过VirtualBox在运行Windows 10的Ubuntu VM上安装google / apiclient时遇到了完全相同的问题,此问题已解决。
夏洛特·莫勒

0

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

为我工作。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.