【问题标题】:gem cannot access rubygems.orggem 无法访问 ruby​​gems.org
【发布时间】:2018-04-12 15:27:07
【问题描述】:

我有一个带有 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出现第一个错误(成功)
  • 将 gem 源从 https://rubygems.org 更改为 http://rubygems.org
  • 将切片上的名称服务器更改为使用 Google 的
  • 从源下载和更新gem(在 2.7.6 上)
  • 运行apt-get update
  • 添加AddTrustExternalCARoot-2048.pem

我没有尝试过的:

  • 动物祭祀
  • 招财兔足
  • 删除所有文件并重新安装映像

我终于(在提交之前)能够通过删除 ruby​​gems.org 作为源并添加 https://gems.ruby-china.org/ 来让 bundle install 工作。为什么 gem 无法访问 ruby​​gems.org?

【问题讨论】:

  • 我也有同样的问题,正在考虑牺牲动物。
  • IPv6 Link-local 仅适用于 Ubuntu 18.04
  • 请允许我劫持此线程以请求任何有此问题的人在 support@rubygems.org 提交支持票。如果您可以访问wget -6 www.google.com,您应该也可以通过 IPv6 访问 ruby​​gems.org。
  • 有关其他 Windows 解决方案,请参阅 this answer

标签: rubygems debian-jessie


【解决方案1】:

api.rubygems.org 当前遇到 IPv6 设置问题:此主机名有 4 个 IPv6 地址,但均未响应。既不是ping,也不是TCP连接尝试。当您运行 gem 时,您的 gem 首先尝试 IPv6 地址并超时,甚至没有时间尝试 IPv4 地址。

解决方案是降低api.rubygems.org 的 IPv6 地址优先级,以便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

【讨论】:

  • 2018 年 11 月,这仍然有效。 Rubygems.org 真的应该只是将 ipv6 地址从 DNS 中提取出来,直到它们解决问题为止。
  • OSX 是否有等效的修复程序?我没有看到 /etc/gai.conf 文件。
  • 2019 年 5 月,这仍然有效。请修复你的 ipv6,rubygems!
  • 2020 年 2 月,这个解决方案仍然有效!请红宝石,修复它!
  • 2021 年 2 月 5 日,这为我解决了这个问题 :)
【解决方案2】:

我在 MacOS 上没有找到 /etc/gai.conf,所以作为一种解决方法,我只是禁用了 IPV6 来下载 gem。这对我有用。

'System Preferences' -> 'Network' -> 选择 WiFi -> 点击 'Advanced' 按钮 -> 选择 'TCP/IP' 选项卡 -> 将 Configure IPV6 选择设置为 'link-local only'。

【讨论】:

  • 我在搜索 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) 大约一个小时后发现了这条评论,但没有运气。如此简单,但这真的很痛苦。留下这些关键字以帮助其他人进行搜索。
  • 这对我有用。这是否意味着禁用了 IPV6?这会影响其他网站或服务吗?
  • Fedora 30,/etc/gai.conf 文件不存在,我找不到任何相关信息,所以我使用 /etc/hosts 方法成功
  • 在 Fedora 33 上,该文件默认不存在,但可以创建。有关默认值和详细信息,请参阅 man gai.conf
  • 这有帮助。但是,我只会暂时这样做
【解决方案3】:

对于遇到此问题的所有人,从 ruby​​gems 3.2.11 开始,我们现在在 ruby​​gems 中提供了针对此问题的选择加入修复程序。

如果您遇到此问题,首先需要将 ruby​​gems 至少升级到 3.2.11。通常你通过运行gem update --system 来做到这一点,但在运行该命令时很可能会遇到同样的问题。如果是这种情况,您可以按照以下说明手动升级 ruby​​gems:https://bundler.io/v2.2/guides/rubygems_tls_ssl_troubleshooting_guide.html#updating-rubygems

升级后,放

:ipv4_fallback_enabled: true

在您的 ~/.gemrc 文件中,rubygems 不应再超时。

默认情况下我们尚未启用此功能的原因是这需要猴子补丁核心 ruby​​ 类,因此我们希望先对修复战进行一些测试。而且,因为潜在的问题是 ruby​​ 中的一个问题,目前缺少 happy eyeballs 实现,但它目前正在处理中,所以如果这个修复程序很快在 ruby​​ 中实现,我们可能根本不需要默认启用我们的猴子补丁。

作为参考,修复程序在此处登陆我们的仓库:https://github.com/rubygems/rubygems/pull/2662,并且正在处理 ruby​​ 问题:https://github.com/ruby/ruby/pull/4038

【讨论】:

  • 这应该是公认的答案,就像一个魅力!谢谢@delvid & Dharman
  • 这对我有用(在 /etc/hosts 中为 api.rubygems.org 和 ruby​​gems.org 临时添加了一些 IP 之后)。
  • 这是最好的答案。
【解决方案4】:

我将下面的行添加到我的 /etc/hosts 并且它可以工作。

151.101.192.70 rubygems.org

【讨论】:

  • 那条线对我不起作用,但 151.101.192.70 api.rubygems.org 做到了
  • 2020 年 8 月,这个修复对我有用。使用 sudo 将 151.101.192.70 api.rubygems.org 添加到我的 /etc/hosts 文件中。但直到我在 Mac 上重新启动 iTerm2 应用程序后它才起作用。
  • 我需要同时定义 rubygems.orgapi.rubygems.org 条目。我想这取决于你的宝石。
  • 在我安装 ruby​​ 3 之前这不是问题
  • 谢谢铃木隆。同样是 RGB,在从更新 rvm 安装 ruby​​ 3 后,我遇到了同样的错误。 gem install <gem> or bundle install 时您是否也遇到过这种情况或卡住?
【解决方案5】:

截至目前,rubygems.org 的 IPv6 问题仍然存在,尽管它似乎并非一直或无处不在。我在一个数据中心使用 VPS 遇到了它,但在另一个数据中心却没有。到目前为止,Alexei Khlebnikov 的回答是解决该问题的最佳和最简单的方法(至少在 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

【讨论】:

  • 感谢您的客气话以及发现 api.rubygems.org 更改了其 IP 地址。我已经更新了我的答案,以取消整个 2a04:4e42::0/32 子网的优先级。
【解决方案6】:

我仍然有同样的问题。以上的组合对我有用,所以谢谢大家。这对我有用(我在 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 命令现在应该也可以工作,前提是您的环境的其余部分设置正确。

再次,我在这里发布此内容是为了提高知名度并帮助其他人,但他的繁重工作是由上面的答案完成的,所以谢谢你:)

【讨论】:

  • 我没有IP,我的输出完全不同...$ dig AAAA api.rubygems.org ; > DiG 9.11.3-1ubuntu1.13-Ubuntu > AAAA api.rubygems.org ;;全局选项:+cmd ;;得到答案:;; ->>HEADER
  • 您应该使用一个 A 而不是 4。这将为您提供 IPv4 地址。
【解决方案7】:

截至 2020 年 11 月 11 日,我在 Ubuntu 20.04 上遇到了同样的问题。我禁用了 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

【讨论】:

  • 这些问题已经持续了很长时间......只是让大家知道这在 Ubuntu 18 @ 2020 年 12 月 7 日对我有用
【解决方案8】:

对于 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 未被使用。

【讨论】:

    【解决方案9】:

    至少在 2020 年 1 月,这对我来说仍然是个问题。 我在上面使用了 Takayuki Suzuki 的解决方案,它对我有用。

    【讨论】:

      猜你喜欢
      • 2015-01-31
      • 2020-01-14
      • 1970-01-01
      • 2019-04-06
      • 1970-01-01
      • 2013-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多