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 для загрузки URL-адреса драгоценного камня при первой ошибке (успешно)
  • Измените источник драгоценного камня с https://rubygems.org на http://rubygems.org
  • Измените серверы имен на срезе, чтобы использовать Google
  • Скачивание и обновление gem из исходников (2.7.6)
  • Беги apt-get update
  • Добавление AddTrustExternalCARoot-2048.pem

Что еще не пробовал:

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

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


person mrturtle    schedule 12.04.2018    source источник
comment
У меня та же проблема, и я подумываю о принесении в жертву животных.   -  person ivan    schedule 26.04.2018
comment
IPv6 Link-local работает только в Ubuntu 18.04.   -  person Andrei Merfu    schedule 28.07.2018
comment
См. Здесь: github.com/rubygems/rubygems/issues/2253   -  person James Hibbard    schedule 02.04.2020
comment
позвольте мне захватить эту ветку, чтобы попросить любого, у кого есть эта проблема, отправить заявку в службу поддержки на [email protected]. если у вас есть доступ к wget -6 www.google.com, вы также сможете получить доступ к rubygems.org через IPv6.   -  person sonalkr132    schedule 10.10.2020
comment
Для другого решения для Windows см. этот ответ.   -  person Roald    schedule 28.01.2021


Ответы (9)


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

person Alexei Khlebnikov    schedule 15.05.2018
comment
Алексей, это исправило. Большое спасибо за полезный ответ! - person mrturtle; 15.05.2018
comment
Нашел этот ответ в ходе обсуждения: help.rubygems.org/discussions/problems/31074 -timeout-error, который может быть полезен другим для контекста. В любом случае, спасибо, Алекс, за решение, сэкономившее мне много времени. - person Carlo Mazzaferro; 10.06.2018
comment
Еще не исправил это на моем сервере, нужно ли мне перезапускать какие-либо службы, чтобы это изменение вступило в силу? - person wmakley; 26.07.2018
comment
В большинстве случаев перезапускать ничего не нужно. При следующем разрешении DNS через getaddrinfo() будут использоваться новые настройки. Но если ваши службы кэшируют разрешенные IP-адреса - им может потребоваться перезапуск. - person Alexei Khlebnikov; 28.07.2018
comment
Ноябрь 2018 года, и это все еще работало. Rubygems.org действительно должен просто вытащить адреса ipv6 из DNS, пока они не исправят ситуацию. - person Brad Hein; 22.11.2018
comment
Есть ли эквивалентное исправление для OSX? Я не вижу /etc/gai.conf файл. - person B Seven; 24.01.2019
comment
Май 2019 года, и это все еще работает. Исправьте, пожалуйста, ваш ipv6, rubygems! - person Maximillian Laumeister; 24.05.2019
comment
@AlexeiKhlebnikov Ваш ответ спас жизнь моей соседской собаке (я собирался принести ее в жертву). Спасибо! - person Tino; 16.06.2019
comment
Fedora 30, файл /etc/gai.conf не существует, и я не могу найти никакой информации об этом, поэтому я успешно использовал метод / etc / hosts - person Weston Ganger; 10.07.2019
comment
У меня только сегодня началась эта проблема. К счастью, я смог быстро найти эту ветку и могу подтвердить, что это все еще работающее решение по состоянию на 10 августа 2019 года. - person Gino; 10.08.2019
comment
Это все еще проблема 27 сентября 2019 г. Этот ответ все еще работает. - person Aearnus; 28.09.2019
comment
Февраль 2020 г., и это решение все еще работает! Пожалуйста, rubygems, исправьте! - person Luccas Paroni; 28.02.2020
comment
После нескольких дней поиска и пробных решений моя проблема была решена. Не могу поверить, что это до сих пор не исправлено. Спасибо за обходной путь! - person djilo; 02.04.2020
comment
Сэкономил мне много времени на то, чтобы возиться с настройками моей системы или, возможно, переустановить Ruby напрямую без apt. Спасибо!!! - person Bruno P. Kinoshita; 17.05.2020
comment
@AlexeiKhlebnikov Спасибо, спаситель !!! Работал как шарм! ‹3 - person Dhrumil Panchal; 29.05.2020
comment
Июль 2020 года, и это решение мне помогло. @AlexeiKhlebnikov как ты это придумал? - person Kartikey Singh; 04.07.2020
comment
Я диагностировал проблему с помощью ping, traceroute, telnet и nmap. До этого я читал статьи по IPv6, Happy Eyeballs, RFC 3484 и 6724, документацию по getaddrinfo (), gai.conf и так далее. Однажды я реализовал Happy Eyeballs в браузере. Итак, у меня просто есть некоторые технические знания о сетях, и я использовал их, чтобы помочь себе и другим людям. :) - person Alexei Khlebnikov; 07.07.2020
comment
Спасибо, мужик! 01.01.2021 все еще работает! - person Irfan; 01.01.2021
comment
5 февраля 2021 года, и это решило проблему для меня :) - person gasc; 05.02.2021
comment
По состоянию на 18.02.2021 на свежем сервере Ubuntu 20.04, это также устранило проблему для меня. - person Jason Shultz; 18.02.2021
comment
21 апреля 2021 года на Ubuntu 20.03 это сработало для меня. - person Joseph; 21.04.2021
comment
21.04.2021, все еще работаю над Pop!_OS 20.04 LTS (x86-64) с ядром Linux 5.11.0-7612-generic. Просто упомяну, что при моей установке файл /etc/gai.conf полностью прокомментирован. Простое добавление последней строки precedence 2a04:4e42::0/32 5 сработало как шарм. - person pierre_loic; 25.04.2021
comment
29.06.2021 Вау, проблема все еще решается в Ubuntu 20.04. Также файл был полностью прокомментирован - person SMSk; 29.06.2021

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

«Системные настройки» -> «Сеть» -> Выбрать WiFi -> нажмите кнопку «Дополнительно» -> выберите вкладку «TCP / IP» -> установите для параметра «Настроить IPV6» значение «только локальная ссылка».

person Mauricio Mora    schedule 25.06.2018
comment
Я нашел этот комментарий примерно через час безуспешных поисков Fetching source index from https://rubygems.org/ и Network error while fetching https://rubygems.org/quick/Marshal.4.8/libv8-3.16.14.19-x86_64-darwin-16.gemspec.rz (execution expired). Так просто, но это было очень больно. Оставив эти ключевые слова, чтобы помочь другим в их поисках. - person Max P Magee; 09.11.2018
comment
Это сработало для меня. Значит ли это, что IPV6 отключен? Влияет ли это на другие сайты или службы? - person B Seven; 24.01.2019
comment
Fedora 30, файл /etc/gai.conf не существует, и я не могу найти никакой информации об этом, поэтому я успешно использовал метод / etc / hosts - person Weston Ganger; 10.07.2019
comment
В Fedora 33 файл по умолчанию не существует, но его можно создать. См. man gai.conf для значений по умолчанию и подробностей. - person Roger Lehmann; 22.02.2021
comment
Это помогло. Однако я бы сделал это только временно - person eljefedelrodeodeljefe; 25.06.2021

Я добавил строку ниже в свой / etc / hosts, и она работает.

151.101.192.70 rubygems.org

person Taka Suzuki    schedule 25.03.2019
comment
Эта строка у меня не сработала, но сработала 151.101.192.70 api.rubygems.org - person Angel Velásquez; 25.03.2019
comment
В августе 2020 года это исправление сработало для меня. Добавление 151.101.192.70 api.rubygems.org в мой файл / etc / hosts с помощью sudo. Но это не сработало, пока я не перезапустил приложение iTerm2 на Mac. - person teknix; 08.08.2020
comment
Мне нужно было определить записи как rubygems.org, так и api.rubygems.org. Полагаю, это зависит от вашего драгоценного камня. - person raddrick; 03.01.2021
comment
Это не было проблемой, пока я не установил Ruby 3 - person raddrick; 03.01.2021
comment
Спасибо Така Сузуки. Также RGB, у меня такая же ошибка после установки ruby ​​3 из обновления rvm. Испытывали ли вы этот единственный сценарий или застряли, когда gem install <gem> or bundle install тоже? - person cdrrazan; 13.01.2021

Для всех, кто сталкивается с этой проблемой, начиная с версии rubygems 3.2.11, мы теперь поставляем исправление для этой проблемы внутри rubygems.

Если у вас возникла эта проблема, вам сначала необходимо обновить rubygems как минимум до версии 3.2.11. Обычно вы делаете это, выполняя gem update --system, но вполне вероятно, что вы столкнетесь с той же проблемой при выполнении этой команды. В этом случае вы можете обновить rubygems вручную, следуя этим инструкциям: https://bundler.io/v2.2/guides/rubygems_tls_ssl_troubleshooting_guide.html#updating-rubygems.

После обновления поставьте

:ipv4_fallback_enabled: true

внутри вашего ~/.gemrc файла и rubygems больше не должны истекать по таймауту.

Причина, по которой мы еще не включили это по умолчанию, заключается в том, что для этого требовались основные классы рубина monkeypatching, поэтому мы хотели сначала немного протестировать битву исправлений. А также, поскольку основная проблема связана с рубином, которому в настоящее время не хватает реализации счастливых глаз, но в настоящее время над ним работают, поэтому нам, возможно, вообще не понадобится включать наши обезьяньи патчи по умолчанию, если это исправление скоро появится в рубине.

Для справки, исправление попало в наш репо здесь: https://github.com/rubygems/rubygems/pull/2662, а проблема с рубином работает здесь: https://github.com/ruby/ruby/pull/4038.

person deivid    schedule 26.02.2021
comment
Это должен быть принятый ответ, сработавший как шарм! Спасибо @delvid & Dharman - person Vitaliy; 03.05.2021

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

$ dig AAAA api.rubygems.org +short
rubygems.org.
2a04:4e42::70
2a04:4e42:400::70
2a04:4e42:600::70
2a04:4e42:200::70
person bpope    schedule 16.08.2018
comment
Спасибо за добрые слова и за то, что api.rubygems.org сменил IP-адреса. Я обновил свой ответ на снижение приоритета всей подсети 2a04: 4e42 :: 0/32. - person Alexei Khlebnikov; 14.09.2018

У меня все еще была та же проблема. Комбинация вышеперечисленного сработала для меня, так что спасибо всем. Вот что у меня сработало (я на Linux):

В терминале введите:

dig AAAA api.rubygems.org

Найдите следующее:

;; ANSWER SECTION:
api.rubygems.org.   60  IN  CNAME   rubygems.org.
rubygems.org.        0  IN  A   151.101.192.70

скопируйте IP-адрес (в моем случае 151.101.192.70, но, согласно приведенным выше ответам, это может отличаться для вас, поэтому обязательно выполните этот шаг и проверьте сами) и перейдите по ссылке:

etc/

и откройте файл хоста так:

sudo vim hosts

Вы должны открыть файл как суперпользователь, иначе вы не сможете его сохранить, поскольку это файл только для чтения. Я использовал vim, но вы можете использовать другой редактор. Внизу укажите скопированный IP-адрес, а затем rubygems.org, например:

151.101.192.70 rubygems.org

Сохраните файл и выйдите. Вы можете попробовать соединение в своем терминале, набрав:

ping rubygems.org

Теперь вы должны увидеть непрерывный поток пакетов. Выполнение любой команды gem install теперь также должно работать, если остальная часть вашей среды настроена правильно.

Опять же, я просто публикую это здесь для наглядности и помощи другим, но тяжелая работа была сделана ответами выше, так что спасибо за это :)

person Benedikt Schnatterbeck    schedule 17.07.2020
comment
Я не получаю IP, мой вывод совсем другой ... $ dig AAAA api.rubygems.org; ‹< ›› DiG 9.11.3-1ubuntu1.13-Ubuntu ‹* ›› AAAA api.rubygems.org ;; глобальные параметры: + cmd ;; Получил ответ: ;; - ›› ЗАГОЛОВОК ‹< - код операции: QUERY, статус: NOERROR, id: 54499 ;; флаги: qr rd ra; ЗАПРОС: 1, ОТВЕТ: 0, АВТОРИТЕТ: 0, ДОПОЛНИТЕЛЬНО: 1 ;; ОПТ-ПСЕВДОЗРЕНИЕ:; EDNS: версия: 0, флаги :; UDP: 65494 ;; РАЗДЕЛ ВОПРОСОВ:; api.rubygems.org. В АААА ;; Время запроса: 0 мсек ;; СЕРВЕР: 127.0.0.53 # 53 (127.0.0.53) ;; КОГДА: Пт 06 ноя, 16:28:20 -03 2020 ;; РАЗМЕР MSG rcvd: 45 - person Wheepy; 06.11.2020
comment
Вы должны использовать один A вместо 4. Это даст вам IPv4-адрес. - person Lachezar Todorov; 17.12.2020

У меня была такая же проблема с Ubuntu 20.04 с 11 ноября 2020 года. Я отключил ipv6, и он начал работать для меня. Вот команды для отключения ipv6:

    sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
    sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
    sudo sysctl -w net.ipv6.conf.lo.disable_ipv6=1
person Dipen Chauhan    schedule 12.11.2020
comment
Эти проблемы продолжаются так долго ... Просто сообщаю всем, что это сработало для меня на Ubuntu 18 @ 7 декабря 2020 г. - person Marcin; 07.12.2020

Для пользователей 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 не использовалась.

person Boon    schedule 02.10.2018

Это все еще проблема для меня, по крайней мере, в январе 2020 года. Я использовал решение Takayuki Suzuki, описанное выше, и оно сработало для меня.

person Gordon    schedule 11.01.2020