Pourquoi le composeur installe-t-il les délais d’attente après 300 secondes?

J’ai un petit projet réalisé dans symfony2 quand j’essaie de le construire sur mon serveur, il échoue toujours lors de la décompression de symfony. Build était OK et soudain le compositeur ne décompresse pas symfony et je n’ai rien changé. J’ai essayé de construire avec Jenkins et aussi manuellement à partir de bash avec le même résultat. Ce n’est pas un problème de permissions et la connexion Internet sur mon serveur est correcte.

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. 

Essayez le composer update/install -o -vvv et vérifiez si le paquet est en cours de chargement depuis le cache du compositeur.

Si oui, essayez d’effacer le cache du compositeur ou essayez d’append -cache-dir=/dev/null .

Pour forcer le téléchargement d’une archive au lieu de cloner des sources, utilisez l’option --prefer-dist en combinaison avec --no-dev .

Sinon, vous pouvez essayer d’augmenter la valeur du délai d’expiration du compositeur:

 export COMPOSER_PROCESS_TIMEOUT=600 ( defaults to 300 ) 
 composer config --global process-timeout 2000 

Composer lui-même impose une limite de durée à l’opération Git à distance. Un examen de la documentation de Composer confirme que la variable d’environnement COMPOSER_PROCESS_TIMEOUT la régit. La variable est définie sur une valeur par défaut de 300 (secondes), ce qui est apparemment insuffisant pour une opération de clone de grande taille utilisant une connexion Internet lente.

Augmenter cette valeur en utilisant:

 COMPOSER_PROCESS_TIMEOUT=2000 composer install 

La suppression du cache du compositeur a fonctionné pour moi.

 rm -rf ~/.composer/cache/* 

Le composant Symfony a le délai d’expiration du processus défini sur 60 par défaut. C’est pourquoi vous obtenez des erreurs comme ceci:

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

Solution

Définir le délai d’attente à 5 minutes ou plus

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

La méthode la plus simple est d’append une option de configuration au fichier composer.json, Ajouter un processus-timeout 0, c’est tout. Cela fonctionne n’importe où.

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

C’est un ancien thread, mais j’ai découvert que la raison du dépassement de temps était l’exécution d’un débogueur php (PHPStorm écoutait les connexions xdebug), ce qui provoquait l’expiration du processus. Lorsque j’ai fermé le PHPStorm ou désactivé l’extension xdebug, aucun délai d’expiration ne s’est produit.

C’est le problème lent NFS. Composer écrit le cache dans le répertoire NFS. Vous devez installer le composeur globalement et réécrire le chemin du cache.

Cela ne marche pas:

 php composer.phar install 

En utilisant ceci:

 composer install 

Avant cette exécution, vous devez configurer le compositeur globalement. Voir ceci https://getcomposer.org/doc/00-intro.md#globally

En outre, vous devez append ces lignes à votre config.json:

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

Travaille pour moi.