我有一个带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
我尝试过:
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?
答案 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)
对于遇到此问题的每个人,从 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核心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,后跟“ rubygems.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月,这仍然是我的问题。 我在上面使用了铃木孝之的解决方案,对我有用。