gem 无法访问 rubygems.org
gem cannot access 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下载gemURL(成功)
- 从 https://rubygems.org to http://rubygems.org
更改 gem 来源
- 更改切片上的名称服务器以使用 Google 的
- 正在从源代码(在 2.7.6 上)下载和更新
gem
- 运行
apt-get update
- 添加
AddTrustExternalCARoot-2048.pem
我没试过的:
- 动物祭祀
- 幸运兔脚
- 正在删除所有文件并重新安装映像
我终于(就在提交之前)通过删除 rubygems.org 作为源并添加 https://gems.ruby-china.org/ 来让 bundle install
工作。为什么 gem 无法访问 rubygems.org?
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
我在 MacOS 上没有找到 /etc/gai.conf
,因此作为一种解决方法,我只是禁用了 IPV6 来下载 gems。这对我有用。
'System Preferences' -> 'Network' -> Select WiFi -> 单击 'Advanced' 按钮 -> select 'TCP/IP' 选项卡 -> 设置将 IPV6 select 配置为 'link-local only'。
截至目前,rubygems.org 的 IPv6 问题仍然存在,尽管似乎并非一直存在或无处不在。我 运行 在一个数据中心使用 VPS,但在另一个数据中心不使用 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
对于 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 未使用。
我将下面的行添加到我的 /etc/hosts 并且有效。
151.101.192.70 rubygems.org
至少在 2020 年 1 月,这对我来说仍然是个问题。
我在上面使用了 Takayuki Suzuki 的解决方案,它对我有用。
我也遇到了同样的问题。以上的组合对我有用,所以谢谢大家。这是对我有用的(我在 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
命令现在也应该可以工作。
再次强调,我只是在这里发布此内容以提高知名度并帮助其他人,但他的繁重工作是由上面的答案完成的,所以谢谢你:)
截至 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
对于遇到此问题的每个人,从 rubygems 3.2.11 开始,我们现在在 rubygems.
中发布了针对此问题的可选修复程序。
如果您遇到此问题,首先需要将 rubygems 至少升级到 3.2.11。通常你通过 运行ning gem update --system
来做到这一点,但很可能你 运行 在 运行ning 该命令时遇到了同样的问题。如果是这种情况,您可以按照以下说明手动升级 rubygems:https://bundler.io/v2.2/guides/rubygems_tls_ssl_troubleshooting_guide.html#updating-rubygems.
升级后,输入
:ipv4_fallback_enabled: true
在您的 ~/.gemrc
文件和 rubygems 中应该不再超时。
我们还没有默认启用它的原因是这需要 monkeypatching 核心 ruby 类,所以我们想先测试一下修复战斗。而且,因为潜在的问题是 ruby 中的一个问题,目前缺少 happy eyeballs 实现,但它目前正在处理中,所以我们可能根本不需要默认启用我们的 monkeypatches 如果这个修复 ruby 即将登陆。
作为参考,修复已登陆我们的存储库:https://github.com/rubygems/rubygems/pull/2662, and the ruby issue is being worked on here: https://github.com/ruby/ruby/pull/4038。
我有一个带有 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下载gemURL(成功)
- 从 https://rubygems.org to http://rubygems.org 更改 gem 来源
- 更改切片上的名称服务器以使用 Google 的
- 正在从源代码(在 2.7.6 上)下载和更新
gem
- 运行
apt-get update
- 添加
AddTrustExternalCARoot-2048.pem
我没试过的:
- 动物祭祀
- 幸运兔脚
- 正在删除所有文件并重新安装映像
我终于(就在提交之前)通过删除 rubygems.org 作为源并添加 https://gems.ruby-china.org/ 来让 bundle install
工作。为什么 gem 无法访问 rubygems.org?
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
我在 MacOS 上没有找到 /etc/gai.conf
,因此作为一种解决方法,我只是禁用了 IPV6 来下载 gems。这对我有用。
'System Preferences' -> 'Network' -> Select WiFi -> 单击 'Advanced' 按钮 -> select 'TCP/IP' 选项卡 -> 设置将 IPV6 select 配置为 'link-local only'。
截至目前,rubygems.org 的 IPv6 问题仍然存在,尽管似乎并非一直存在或无处不在。我 运行 在一个数据中心使用 VPS,但在另一个数据中心不使用 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
对于 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 未使用。
我将下面的行添加到我的 /etc/hosts 并且有效。
151.101.192.70 rubygems.org
至少在 2020 年 1 月,这对我来说仍然是个问题。 我在上面使用了 Takayuki Suzuki 的解决方案,它对我有用。
我也遇到了同样的问题。以上的组合对我有用,所以谢谢大家。这是对我有用的(我在 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
命令现在也应该可以工作。
再次强调,我只是在这里发布此内容以提高知名度并帮助其他人,但他的繁重工作是由上面的答案完成的,所以谢谢你:)
截至 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
对于遇到此问题的每个人,从 rubygems 3.2.11 开始,我们现在在 rubygems.
中发布了针对此问题的可选修复程序。如果您遇到此问题,首先需要将 rubygems 至少升级到 3.2.11。通常你通过 运行ning gem update --system
来做到这一点,但很可能你 运行 在 运行ning 该命令时遇到了同样的问题。如果是这种情况,您可以按照以下说明手动升级 rubygems:https://bundler.io/v2.2/guides/rubygems_tls_ssl_troubleshooting_guide.html#updating-rubygems.
升级后,输入
:ipv4_fallback_enabled: true
在您的 ~/.gemrc
文件和 rubygems 中应该不再超时。
我们还没有默认启用它的原因是这需要 monkeypatching 核心 ruby 类,所以我们想先测试一下修复战斗。而且,因为潜在的问题是 ruby 中的一个问题,目前缺少 happy eyeballs 实现,但它目前正在处理中,所以我们可能根本不需要默认启用我们的 monkeypatches 如果这个修复 ruby 即将登陆。
作为参考,修复已登陆我们的存储库:https://github.com/rubygems/rubygems/pull/2662, and the ruby issue is being worked on here: https://github.com/ruby/ruby/pull/4038。