123 votes

Pourquoi composer install expire-t-il après 300 secondes ?

J'ai un petit projet fait en symfony2 quand j'essaie de le construire sur mon serveur, cela échoue toujours lors du dézippage de Symfony. La construction s'est bien passée et soudainement, composer ne dézippe pas Symfony et je n'ai rien changé. J'ai essayé de construire avec Jenkins et aussi manuellement en bash avec le même résultat. Ce n'est pas un problème de permissions et la connexion internet sur mon serveur est également bonne.

Chargement des dépôts composer avec des informations sur les packages
Installation des dépendances (y compris celles requises pour le développement) à partir du fichier de verrouillage
 - Installation de symfony/symfony (v2.3.4)
 Téléchargement : 100%
[Symfony\Component\Process\Exception\ProcessTimedOutException]
Le processus "unzip '/chemin/vendor/symfony/symfony/6116f6f3
d4125a757858954cb107e64b' -d 'vendor/composer/b2f33269' && chmod -R u+w 'vendor/composer/b2f33269'" a dépassé le délai limite de 300 secondes.

8voto

Hadu Points 467

C'est un vieux fil de discussion mais j'ai découvert que la raison du time out était l'exécution d'un débogueur php (PHPStorm écoutait les connexions xdebug) ce qui provoquait le dépassement de délai. Lorsque j'ai fermé PHPStorm ou désactivé l'extension xdebug, aucun time out ne s'est produit.

5voto

wormhit Points 1361

Supprimer le cache du compositeur a fonctionné pour moi.

rm -rf ~/.composer/cache/*

4voto

Mahmoud Zalt Points 62

Le composant Symfony a un timeout de processus fixé à 60 par défaut. C'est pourquoi vous obtenez des erreurs comme celle-ci :

[Symfony\Component\Process\Exception\ProcessTimedOutException]
Le processus "composer update" a dépassé le délai de 60 secondes.

Solution

Définir le timeout à 5 minutes ou plus

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

2voto

amurrell Points 348

Se sentir de la douleur: google/apiclient & tentatives de téléchargement répétées

J'avais un problème avec composer et google/apiclient, tournant dans un Docker ubuntu, sur une machine hôte Mac (et pas Windows comme d'autres personnes).

Le problème: il continuait à essayer de télécharger toutes les 5 minutes. Ce n'était pas perceptible au début car il n'y avait pas d'horodatage, même en exécutant composer -vvv install. Après de nombreux intervalles de 5 à 15 minutes, j'ai réalisé douloureusement que j'étais dans l'enfer d'un programmeur - en attendant de longues périodes entre chaque tentative pour résoudre ledit problème. De plus, je n'ai aucun véritable message d'erreur de "timeout" pour aider à résoudre ce problème.

Choses que j'ai essayées:

  • export COMPOSER_PROCESS_TIMEOUT=600 # par défaut est 300
  • ajout à la section config du composer.json: "process-timeout": 0
  • compression des téléchargements - également dans la section config: "compressed": true

Exemple de lignes répétées:

Lecture de /root/.cache/composer/files/watson/rememberable/61967a1ee36ae90d92cb250b916ec819f141400a.zip à partir du cache
  - Chargement de watson/rememberable (6.1.0) à partir du cache
[302] https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/033de899257a294ca82f52fe4296dac011d01f74
Suivre la redirection (1) https://codeload.github.com/googleapis/google-api-php-client-services/legacy.zip/033de899257a294ca82f52fe4296dac011d01f74
  - Téléchargement de google/apiclient-services (v0.326.0)
Téléchargement de https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/033de899257a294ca82f52fe4296dac011d01f74
[302] https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/033de899257a294ca82f52fe4296dac011d01f74
Suivre la redirection (1) https://codeload.github.com/googleapis/google-api-php-client-services/legacy.zip/033de899257a294ca82f52fe4296dac011d01f74
  - Téléchargement de google/apiclient-services (v0.326.0)
Téléchargement de https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/033de899257a294ca82f52fe4296dac011d01f74
[302] https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/033de899257a294ca82f52fe4296dac011d01f74
Suivre la redirection (1) https://codeload.github.com/googleapis/google-api-php-client-services/legacy.zip/033de899257a294ca82f52fe4296dac011d01f74
  - Téléchargement de google/apiclient-services (v0.326.0)
Téléchargement de https://api.github.com/repos/googleapis/google-api-php-client-services/zipball/033de899257a294ca82f52fe4296dac011d01f74

Résolution du problème avec php.ini

Lorsque j'ai finalement réalisé que c'était un 5 minutes de délai, j'ai commencé à remettre en question mes paramètres php.ini.

Appuyé par cet article sur le site de composer, j'ai découvert que je pouvais éditer le default_socket_timeout car il choisira le nombre le plus élevé entre celui par défaut (300) et default_socket_timeout (60) :

Cela signifie que votre réseau est probablement si lent qu'une requête a mis plus de 300 secondes à se terminer. C'est le délai d'attente minimum que Composer utilisera, mais vous pouvez l'augmenter en augmentant la valeur de default_socket_timeout dans votre php.ini à quelque chose de plus élevé.

Voici ce que j'ai mis (/etc/php/8.1/cli/php.ini) et cela a fonctionné:

; Délai d'attente par défaut pour les flux basés sur les sockets (secondes)
; https://php.net/default-socket-timeout
; default_socket_timeout = 60
default_socket_timeout = 3600

Note supplémentaire: compress: true était une mauvaise idée

Je l'ai fait télécharger (j'ai dû le régler à plus de 10 minutes!) Cependant, j'ai eu un nouveau problème avec les fichiers zip - alors j'ai retiré le compress: true de la config, supprimé le dossier vendor, et composer clearcache dans l'espoir que cela résolve le problème. Ça a marché!

Messages d'erreur liés aux fichiers zip:

Exécution de la commande asynchrone (CWD): '/usr/bin/unzip' -qq

Impossible d'extraire google/apiclient-services

Signature de fin de répertoire central non trouvée. Soit ce fichier n'est pas
  un zip, soit il constitue un disque d'une archive multi-parties. Dans ce cas, le répertoire central et le commentaire zip seront trouvés sur
  le dernier disque(s) de cette archive.

L'archive peut contenir des noms de fichiers identiques avec différentes majuscules (ce qui échoue sur les systèmes de fichiers insensibles à la casse)
Échec de l'extraction avec la commande unzip, basculement vers la classe ZipArchive

1voto

Michael Kiarie Points 1107

Je suis d'accord avec la plupart de ce qui a été suggéré ci-dessus, mais j'ai eu le même problème et ce qui a fonctionné pour moi a été de supprimer le dossier du fournisseur et de relancer composer install

Cordialement

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X