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