"gem install rails"安装失败,显示DNS错误。

23
$ rvm use
Using /home/owner/.rvm/gems/ruby-2.1.2
$ gem install rails
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    Errno::ECONNREFUSED: Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 80 (http://your-dns-needs-immediate-attention.network/quick/Marshal.4.8/thread_safe-0.3.4.gemspec.rz)
$ gem update --system
...
$ gem -v
2.4.1
$ gem install rails
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    Errno::ECONNREFUSED: Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 80 (http://your-dns-needs-immediate-attention.network/quick/Marshal.4.8/rails-4.1.5.gemspec.rz)

我已经尝试过:

  1. 安装其他gem(devise、activerecord)。我得到了同样的错误。
  2. 重新安装RVM
  3. 运行gem update --system
  4. 将静态DNS设置为Google的8.8.8.8和8.8.4.4
  5. https://production.cf.rubygems.org添加为gem源(错误详见下文)
  6. 将14.04安装在我的12.04之前。错误仍然存在。错误的来源必须在我的电脑之外。

关于我的连接的附加信息:

  1. 我可以通过浏览器连接到https://rubygems.org/
  2. 我的调制解调器防火墙完全禁用。
  3. $ curl -v --head https://rubygems.org 输出:http://pastebin.com/ca6DAvaU

我的/etc/resolv.conf

$ cat /etc/resolv.co
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
#     DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 75.75.75.75
search home.network

添加直接的宝石源

参考:https://stackoverflow.com/a/19299266/3993020

owner@owner-Z87X-UD3H:~$ gem sources --add https://production.cf.rubygems.org
Error fetching https://production.cf.rubygems.org:
    Errno::ECONNREFUSED: Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 443 (https://your-dns-needs-immediate-attention.network/specs.4.8.gz)

安装 rails 过程中的额外调试信息

owner@owner-Z87X-UD3H:~$ gem install rails --debug -V
NOTE:  Debugging mode prints all exceptions even when rescued
Exception `LoadError' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/resolv.rb:169 - LoadError
HEAD https://api.rubygems.org/api/v1/dependencies
Exception `OpenSSL::SSL::SSLErrorWaitReadable' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/buffering.rb:182 - read would block
200 OK
GET https://api.rubygems.org/api/v1/dependencies?gems=rails
Exception `OpenSSL::SSL::SSLErrorWaitReadable' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/buffering.rb:182 - read would block
Exception `OpenSSL::SSL::SSLErrorWaitReadable' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/buffering.rb:182 - read would block
Exception `OpenSSL::SSL::SSLErrorWaitReadable' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/buffering.rb:182 - read would block
Exception `OpenSSL::SSL::SSLErrorWaitReadable' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/buffering.rb:182 - read would block
Exception `OpenSSL::SSL::SSLErrorWaitReadable' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/openssl/buffering.rb:182 - read would block
200 OK
Exception `Resolv::DNS::Config::NXDomain' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/resolv.rb:547 - _rubygems._tcp.api.rubygems.org
Exception `Errno::ECONNREFUSED' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/2.1.0/net/http.rb:879 - Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 443
Exception `Gem::RemoteFetcher::FetchError' at /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/remote_fetcher.rb:286 - Errno::ECONNREFUSED: Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 443 (https://your-dns-needs-immediate-attention.network/quick/Marshal.4.8/rails-4.1.5.gemspec.rz)
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    Errno::ECONNREFUSED: Connection refused - connect(2) for "your-dns-needs-immediate-attention.network" port 443 (https://your-dns-needs-immediate-attention.network/quick/Marshal.4.8/rails-4.1.5.gemspec.rz)
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/remote_fetcher.rb:286:in `rescue in fetch_path'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/remote_fetcher.rb:259:in `fetch_path'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/source.rb:146:in `fetch_spec'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/resolver/api_specification.rb:76:in `spec'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/resolver/installer_set.rb:77:in `add_always_install'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/dependency_installer.rb:461:in `resolve_dependencies'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/commands/install_command.rb:238:in `install_gem'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/commands/install_command.rb:299:in `block in install_gems'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/commands/install_command.rb:295:in `each'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/commands/install_command.rb:295:in `install_gems'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/commands/install_command.rb:202:in `execute'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/command.rb:307:in `invoke_with_build_args'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/command_manager.rb:168:in `process_args'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/command_manager.rb:138:in `run'
    /home/owner/.rvm/rubies/ruby-2.1.2/lib/ruby/site_ruby/2.1.0/rubygems/gem_runner.rb:54:in `run'
    /home/owner/.rvm/rubies/ruby-2.1.2/bin/gem:21:in `<main>'

我应该提到我能够无缝浏览互联网。这个问题是从生成DNS错误的同一台计算机发布的。 - tmtmtmtmt
1
想知道"your-dns-needs-immediate-attention.network"消息是从哪里来的吗?请发一下你的Gemfile。 - RAJ
在安装RVM、Ruby和Rails时,Gemfile没有任何作用。 - Rahul Singh
我也刚遇到了这个错误。在这里,我尝试安装Treat gem。 - DiegoSalazar
1
我刚刚收到了“your-dns-needs-immediate-attention.network”的提示,当我在谷歌上搜索时,它引导我来到这里。最大的区别是?我是从Outlook收到的提示,询问我是否想要重定向到该网站以获取新的设置。我以前从未见过这个提示。 - Jonathan Martin
显示剩余6条评论
14个回答

30

正如 blasio 指出的那样。看起来 Xfinity 调制解调器正在设置搜索域为 home.network,这会因他所提到的原因而搞乱事情(本质上,home.network 现在是调制解调器在建立连接之前尝试联系的有效域名)。

我遇到了同样的问题,修改 resolv.conf 似乎解决了问题,并且这应该成为 Linux 环境下的一种可接受的解决方案。我在运行 Ubuntu 的虚拟机上尝试时遇到了这个问题,我的主机 (OSX Mavericks) 也像调制解调器一样传递了 search home.network,所以我想看看是否能找到可以在主机操作系统级别上解决此问题的解决方案,因为我在 OSX 终端上尝试 gem install rails 时也出现了相同的问题。

如果您进入 OSX 网络设置,在 DNS 下,您将看到在“搜索域”区域下的 home.network 行。经过一些搜索,似乎 Comcast 最近将其从 http://hds1.ma.comcast.net' 更改。 我将其更改回来,重新启动并再次尝试 gem install rails,这次没有问题。

奇怪的问题,但这比更换调制解调器或更改 gem 源更好的解决方案。


你到底在哪里做了什么修改?在网络首选项的DNS选项卡中,home.network搜索域是灰色的,这意味着它来自其他地方,对吗? - tamouse
谢谢,经过尝试了许多疯狂的不同方法后,这个帮了我。 - fcastellanos
1
@tamouse,这是来自您的调制解调器。您实际上是在层次结构中添加了一些内容。因此,在DNS选项卡上,您应该看到home.network,您应该看到一个加号以添加新的搜索域。在那里输入http://hds1.ma.comcast.net,然后您就可以使用了。 - jalvarado91
4
谢谢 @jalvarado91。实际上我添加了 home.local,这是它曾经使用的名称,对我来说很有效。不过我认为在那个字段中不能使用 http:// URL,因为据我所知 DNS 并没有使用 80 端口进行搜索。 - tamouse
这解决了问题!感谢您节省了我数小时的时间。 - Dustin Falgout
显示剩余3条评论

7
我曾经遇到与Comcast xFinity和Compass相关的问题。
Windows 7用户更新:
Go to Control Panel > Network and Sharing Center
Under "Active Networks" select "Connections: Local Area Connections"
In the "Local Area Connection Status" dialogue box, click on "Properties"
Double click the IPv4 item
In the "Internet Proptocol Verion 4" icon or click the "Properties" button, then click "Advanced"
In the DNS tab, just above the 2nd input box, click the "Append These DNS suffixes (in order)" radio button,
    then click "Add", enter "home.lan", then click OK until the dialogue closes.

    Many thanks to John Smith for the Vista fix and Somnambulent for Win 8.1 fix.

5
你的 DNS 错误似乎与 .network 成为 TLD 以及你的 resolv.conf 缺少 ndots 配置有关。我刚在 .prod 中遇到了这个问题。
除非你在家里有自己的 DNS 服务器来处理内部 .network 域,否则从 /etc/resolv.conf 中删除 search home.network 应该可以解决问题。
由于你的 /etc/resolv.conf 是由 resolveconf 生成的,正如你的 resolv.conf 所说,你可能想要从你的配置中删除 home.network,请参见 这里的示例

4
我希望能向大家表示感谢。由于我是新来的,所以无法添加评论或投票,只能来到答案部分。
当我尝试安装CocoaPods时,出现了以下问题:
➜  ~  gem install cocoapods
ERROR:  While executing gem ... (Gem::RemoteFetcher::FetchError)
    Errno::ETIMEDOUT: Operation timed out - connect(2) for "your-dns-needs-immediate-attention.network" port 443 (https://your-dns-needs-immediate-attention.network/quick/Marshal.4.8/cocoapods-0.33.1.gemspec.rz)`enter code here`

home.local添加到DNS搜索域即可解决此问题。
再次感谢!我很欣赏你的精神!

你是在说添加 home.local 实际上是这个问题的可行解决方案吗?否则,这应该被关闭为“不是答案”。 - DanM7
1
是的,添加 home.local 是这个问题的可行解决方案! - Roden Luo

3
我正在使用openSUSE 13.1操作系统进行Rails开发,突然遇到了相同的问题,并向SUSE邮件列表报告。然后在此处得到了关于该问题的非常好的解释。
背景:".site"顶级域名已正式注册,因此不再可用于私人使用。 要做的事情:更改您的私人顶级域名,改为未注册的名称。 需要注意的事项:".local"用于mDNS / ZeroConf / Bonjour / Rendezvous,因此请勿将其用于DNS / DHCP! 示例:".box"、".lan":这两个名称都由某些互联网连接路由器(DSL / Cable / Fibre)建议使用;".lnet"、".your-name-here"(例如.ArupRakshit)是可能的选择,值得一试。
我按照此处的指示进行操作。
对于未来的读者,请前往YAST->网络设备->网络设置->主机名/DNS->域名(在此处输入您的名称)。
[arup@Rails]$ gem install rails --no-ri --no-rdoc
Fetching: thread_safe-0.3.5.gem (100%)
Successfully installed thread_safe-0.3.5
Fetching: tzinfo-1.2.2.gem (100%)
Successfully installed tzinfo-1.2.2 


Fetching: i18n-0.7.0.gem (100%) 
........
........
[arup@Rails]$ rails -v
Rails 4.2.0

现在一切都准备好了。 :)

3
我正在使用RVM(1.25.29),Ubuntu 14.04和ruby 2.0.0。这是一个全新的RVM和ruby 2.0安装。
在我的情况下,我尝试安装OpenShift Online的命令行工具:rhc,使用“gem install rhc”。
最后,我通过使用bundle install和一个Gemfile来解决了它。我不确定为什么,但bundle能够通过https连接到rubygems.org获取gem,而“gem install”无法。
尝试创建一个包含您的gem的Gemfile作为临时修复以安装gem。
Gemfile:
source 'https://rubygems.org'

# have bundle handle the gem install via https
gem 'rails'

然后运行:

 bundle install

使用"gem install"使它工作的唯一方法是使用以下命令:

gem install --source http://rubygems.org

但这是不安全的,不建议使用。

我无法确定为什么bundle可以通过https安装,但gem不能。我对ruby和rvm相对较新。

bundler gem随着rvm安装而来,但rubygems随ruby2.0.0-p481一起安装。起初,由于错误,我认为它与openssl有关,但经过多次尝试后,似乎与缺少依赖的gems有关。

通过bundle安装了gem之后,我能够卸载它,然后通过“gem install”重新安装。我注意到,“bundle install”在安装“rhc”之前安装了一些缺少的网络和ssl相关的gems。

不知道bundlegem install如何工作,我认为bundler gem具有通过https发布所需的“所有”内容,而rubygems(随ruby 2.0安装)没有。这就解释了为什么在bundle install之后,gem install可以工作。

我希望这对遇到此问题的其他人有用。如果不行,至少还有一件事可尝试 ;-).


2

1

对我来说,"your-dns-needs-immediate-attention" 其实意味着 "你的 gem 源不可用"。

gem source --list

检查输出。如果当前列表无效,则可以简单地
gem source -a https://rubygems.org

使用适当的来源,如其他资源等。然后使用-r标志删除无效来源。


0

当我尝试安装premailer并升级ruby到当前稳定版本(2.3.0)时,遇到了同样的问题。但是升级后问题得到了解决。

使用rvm:

rvm install 2.3.0

rvm use 2.3.0

gem install premailer 

当然,这适用于任何宝石,而不仅仅是预处理器。


0
如果您使用Mac系统,可以尝试通过编辑/etc/resolv.conf文件中的search语句,并在单词后添加.local来进行设置。
例如:
# This file is automatically generated.
#
search network.local

注意:上面的network是本案例的域名。您可以使用任何单词。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接