gem无法访问rubygems.org

时间:2018-04-12 15:27:07

标签: rubygems debian-jessie

我有一个带Rackspace的服务器,我用于一些Ruby站点。当我在新网站上尝试SELECT table1.*, ( SELECT table2.* FROM Table2 table2 WHERE table2.key_id = table1.key_id ) FROM Table1 table1 时,我会

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

我尝试过:

  • 使用curl在第一个错误(成功)中下载gem URL
  • 将宝石来源从https://rubygems.org更改为http://rubygems.org
  • 更改切片上的名称服务器以使用Google的
  • 从源代码下载和更新ERROR: While executing gem ... (Gem::RemoteFetcher::UnknownHostError) timed out (http://api.rubygems.org/specs.4.8.gz) (在2.7.6上)
  • 运行gem
  • 添加apt-get update

我没有尝试过:

  • 动物牺牲
  • 幸运兔脚
  • 删除所有文件并重新安装图像

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

9 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:15)

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

“系统偏好设置”->“网络”->选择WiFi->单击“高级”按钮->选择“ TCP / IP”选项卡->将“配置IPV6”设置设置为“仅本地链接”。

答案 2 :(得分:4)

对于遇到此问题的每个人,从 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 不应再超时。

默认情况下我们还没有启用它的原因是这需要monkeypatching核心ruby类,所以我们想先对修复战进行一些测试。而且,因为潜在的问题是 ruby​​ 中的一个问题,它目前缺乏 happy eyeballs 实现,但目前正在处理中,所以如果在 ruby​​ 领域中修复了这个问题,我们可能根本不需要默认启用我们的monkeypatches很快。

作为参考,修复程序已在此处发布到我们的存储库:https://github.com/rubygems/rubygems/pull/2662,而 ruby​​ 问题正在此处解决:https://github.com/ruby/ruby/pull/4038

答案 3 :(得分:2)

到目前为止,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

答案 4 :(得分:2)

我仍然有同样的问题。以上各项对我有用,谢谢大家。这是对我有用的东西(我在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,后跟“ ruby​​gems.org”,如下所示:

151.101.192.70 rubygems.org

保存文件并退出。您可以通过以下方式在终端中尝试连接:

ping rubygems.org

您现在应该看到连续的数据包流。只要正确设置了其余环境,现在也可以运行任何gem install命令。

再次,我只是在此处发布此信息,以提高知名度并帮助其他人,但他的繁琐工作由上述答案完成,因此谢谢您:)

答案 5 :(得分:1)

我将以下行添加到了/ etc / hosts中,并且可以正常工作。

151.101.192.70 rubygems.org

答案 6 :(得分:1)

截至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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

至少在2020年1月,这仍然是我的问题。 我在上面使用了铃木孝之的解决方案,对我有用。