J'ai un serveur avec Rackspace que j'utilise pour quelques sites Ruby. Quand j'essaie bundle install
sur un nouveau site, je reçois
Retrying download gem from http://rubygems.org/ due to error (2/4): Gem::RemoteFetcher::UnknownHostError timed out (http://rubygems.org/gems/rake-12.3.1.gem)
Ou essayer gem update --system
je reçois
ERROR: While executing gem ... (Gem::RemoteFetcher::UnknownHostError)
timed out (http://api.rubygems.org/specs.4.8.gz)
Ce que j'ai essayé
gem
à partir des sources (sous 2.7.6)apt-get update
AddTrustExternalCARoot-2048.pem
Ce que je n'ai pas essayé
J'étais enfin (juste avant de soumettre cela) capable de faire fonctionner bundle install
en supprimant rubygems.org comme source et en ajoutant https://gems.Ruby-china.org/ . Pourquoi gem serait-il incapable d'accéder à rubygems.org?
api.rubygems.org
rencontre actuellement des problèmes avec la configuration IPv6: ce nom d'hôte a 4 adresses IPv6, mais ne répond à aucune de ces adresses. Ni à ping
, ni aux tentatives de connexion TCP. Lorsque vous exécutez gem
, votre gem
essaie d'abord les adresses IPv6 et expire, sans même avoir le temps d'essayer les adresses IPv4.
La solution consiste à réduire la priorité des adresses IPv6 pour api.rubygems.org
, de sorte que gem
essaiera d'abord les adresses IPv4. Pour ce faire, mettez ces lignes dans /etc/gai.conf
:
# Debian defaults.
precedence ::1/128 50
precedence ::/0 40
precedence 2002::/16 30
precedence ::/96 20
precedence ::ffff:0:0/96 10
# Low precedence for api.rubygems.org IPv6 addresses.
precedence 2a04:4e42::0/32 5
Je n'ai pas trouvé /etc/gai.conf
sur MacOS. Pour contourner ce problème, je viens de désactiver IPV6 pour télécharger les gemmes. Cela a fonctionné pour moi.
'Préférences Système' -> 'Réseau' -> Sélectionnez WiFi -> cliquez sur le bouton 'Avancé' -> sélectionnez l'onglet 'TCP/IP' -> configurez la sélection Configurer IPV6 sur 'Lien local uniquement'.
À ce jour, les problèmes IPv6 avec rubygems.org existent toujours, bien que cela ne semble pas toujours ou partout. Je l'ai rencontré avec des VPS dans un centre de données, mais pas dans un autre. La réponse ci-dessus d'Alexei Khlebnikov est de loin le moyen le plus simple et le plus simple de contourner le problème (au moins sous Linux). Cependant, veillez à effectuer votre propre recherche pour les adresses IPv6 de api.rubygems.org; J'ai trouvé que les adresses spécifiques ci-dessus ne sont plus correctes.
$ Dig AAAA api.rubygems.org +short
rubygems.org.
2a04:4e42::70
2a04:4e42:400::70
2a04:4e42:600::70
2a04:4e42:200::70
Pour les utilisateurs Windows, le problème peut être résolu en hiérarchisant les adresses IPv4 sur IPv6 (voir https://superuser.com/a/436944 ). Vérifiez vos stratégies de préfixe en utilisant PowerShell en tant qu'administrateur:
netsh interface ipv6 show prefixpolicies
Vous devriez voir que les adresses IPv6 (::/0) ont une priorité supérieure à IPv4 (::/96 et :: ffff: 0: 0/96). Pour résoudre ce problème, supprimez l'entrée IPv6 et rajoutez-la avec une priorité inférieure, par exemple:
netsh interface ipv6 del prefixpolicy ::/0
netsh interface ipv6 add prefixpolicy ::/0 3 6
où la priorité 3 sur ma machine était inférieure à toutes les autres, et l'étiquette 6 était inutilisée.