gem не может получить доступ rubygems.org

у меня есть сервер с Rackspace, который я использую для нескольких сайтов Ruby. Когда я пытаюсь bundle install на новом сайте я получаю

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)

или пытаются gem update --system Я

ERROR:  While executing gem ... (Gem::RemoteFetcher::UnknownHostError)
timed out (http://api.rubygems.org/specs.4.8.gz)

что я пробовал:

  • использование curl для загрузки GEM URL в первой ошибке (успешно)
  • изменить исходный гем от https://rubygems.org до http://rubygems.org
  • измените серверы имен на срезе для использования Google
  • загрузка и обновление gem из источника (на 2.7.6)
  • Run apt-get update
  • добавлять AddTrustExternalCARoot-2048.pem

чего я не пробовал:

  • жертву животных
  • счастливая кроличья лапка
  • удаление всех файлов и переустановка изображения

я, наконец, (как раз перед отправкой этого) смог получить bundle install работать путем извлекать rubygems.org как источник и добавление https://gems.ruby-china.org/. Почему gem не может получить доступ rubygems.org?

4 ответов


api.rubygems.org в настоящее время возникают проблемы с настройкой IPv6: это имя хоста имеет 4 адреса IPv6, но не отвечает ни на один из них. Ни ping, ни к попыткам подключения TCP. Когда вы используете gem ваш gem сначала пробует IPv6-адреса и тайм-аут на них, не имея времени даже попробовать IPv4-адреса.

решение состоит в том, чтобы снизить приоритет IPv6-адресов для api.rubygems.org, Так что gem сначала попробуем IPv4-адреса. Для того, чтобы сделать это, положите эти строки в /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


Я не нашел /etc/gai.conf на MacOS, так что в качестве обходного пути я просто отключил IPV6 для загрузки драгоценных камней. Это сработало для меня.

"Системные настройки" - > "Сеть" - > выберите WiFi - > нажмите кнопку "Дополнительно" - > выберите вкладку "TCP/IP" - > установите Configure IPV6 выберите "link-local only".


на эту дату проблемы IPv6 с rubygems.org все еще существуют, хотя кажется, что не все время и не везде. Я столкнулся с ним с VPSs в одном дата-центре, но не в другом. Ответ Алексея Хлебникова выше-это, безусловно, лучший и самый простой способ обойти проблему (по крайней мере, в Linux). Тем не менее, не забудьте сделать свой собственный поиск для api.rubygems.org адреса IPv6; я обнаружил, что конкретные адреса выше больше не являются правильными.

$ dig AAAA api.rubygems.org +short
rubygems.org.
2a04:4e42::70
2a04:4e42:400::70
2a04:4e42:600::70
2a04:4e42:200::70

для пользователей Windows проблема может быть решена путем приоритизации IPv4-адресов над IPv6 (см.https://superuser.com/a/436944). Проверьте политики префиксов с помощью PowerShell в качестве администратора:

netsh interface ipv6 show prefixpolicies

вы должны видеть, что адреса IPv6 (::/0) имеют более высокий приоритет над IPv4 (::/96 и ::ffff:0:0/96). Чтобы исправить это, удалите запись IPv6 и повторно добавьте ее с более низким приоритетом, например:

netsh interface ipv6 del prefixpolicy ::/0
netsh interface ipv6 add prefixpolicy ::/0 3 6

где приоритет 3 на моей машине был ниже, чем все остальные, и ярлык 6 не использовался.