【问题标题】:SocketError (getaddrinfo: Name or service not known) - Sunspot/Solr Rails developmentSocketError (getaddrinfo: Name or service not known) - Sunspot/Solr Rails 开发
【发布时间】:2012-03-11 10:58:46
【问题描述】:

我在将我的 rails 3.0.10 应用程序部署到带有 Passenger、Capistrano、nginx 和 MySQL 的 Ubuntu 10.04 服务器时遇到了很多麻烦(使用 apache2 更麻烦)。将 rake 降级到 0.8.7 后它终于可以工作了,但是现在 Sunspot/Solr 在我的开发环境中不起作用。 sunspot_solr 服务器正在运行,我能够获取服务器的 url,并通过浏览器连接到它。 url 与 sunspot.yml 中的相同。我不知道我做了什么会导致问题。我之前也遇到过太阳黑子的问题(在我降级 rake 之前)。然后它突然又开始工作了。我不知道为什么...我尝试了两个版本的 Sunspot(1.2.1 和 1.3.0)。两者之前都在工作,但现在不再工作了。

这是我收到的错误消息:

SocketError (getaddrinfo: Name or service not known):
app/models/resource.rb:128:in `text_search'
app/controllers/search_controller.rb:21:in `index'

Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/_trace.erb (2.0ms)
Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/_request_and_response.erb (161.6ms)
Rendered /usr/lib/ruby/gems/1.8/gems/actionpack-3.0.10/lib/action_dispatch/middleware/templates/rescues/diagnostics.erb within rescues/layout (168.9ms)

控制器有点乱,所以我只包括相关部分:

@criterion = params[:criterion]
@sort_direction = params[:sort_direction]
if @criterion && @sort_direction
  session["sort_search"] = @criterion + "|" + @sort_direction 
elsif session["sort_search"]
  @criterion = session["sort_search"].split("|")[0]
  @sort_direction = session["sort_search"].split("|")[1]
else
  @criterion = "updated_at"
  @sort_direction = "desc"
 end
@search = Resource.text_search(session[:search_params] || "", current_user, @criterion, @sort_direction) 
@resources = @search.results

自从控制器工作以来,我没有更改控制器中的任何内容。

我的宝石文件:

source 'http://rubygems.org'
gem 'rake'
gem 'rails', '3.0.10'
gem 'jquery-rails', '>= 1.0.12'
gem 'sqlite3'
gem 'ancestry'
gem 'carrierwave'
gem 'sunspot_rails', '>= 1.3' #'~> 1.2.1' #
gem 'authlogic'
gem 'will_paginate'
gem 'declarative_authorization'
group :production do
  gem 'mysql'
end
group :development do
  gem 'sunspot_solr'
end
gem 'capistrano'

我的 rakefile:

require File.expand_path('../config/application', __FILE__)
require 'rake'

Skolearkivet::Application.load_tasks

【问题讨论】:

  • 请贴出控制器的来源
  • 编辑了我的帖子以包含控制器的相关部分
  • 我认为我们需要更多,因为模型中触发了错误:app/models/resource.rb:128:
  • 控制器和模型中的一切都运行良好。我唯一更改的是 gemfile、rakefile 等文件。我将编辑我的初始帖子以包含这些。

标签: ruby-on-rails-3 sunspot sunspot-rails sunspot-solr


【解决方案1】:

只是一个疯狂的猜测,你有没有机会使用 localhost 作为主机名?尝试将 localhost 更改为 127.0.0.1

【讨论】:

  • 啊,它的工作原理?好的。是的,不知道,但是 localhost 的事情有时很奇怪......
  • 是的,它正在工作!我猜想在部署应用程序时,'localhost' 指向远程服务器上的 localhost,而不是在开发机器上。不然我也看不懂。
  • 我遇到了同样的问题,但我的 server_name 不是 localhost,有什么建议吗?
  • @SamBaumgarten 你解决过这个问题吗?你检查你的 /etc/hosts 文件了吗?
  • 我在更改该主机名时遇到了一些麻烦,因为 Ror 不使用 Apache。 localhost应该映射到hosts文件中的127.0.0.1还是什么意思?
【解决方案2】:

我将此行添加到文件 app/controllers/search_controller.rb 的顶部

require 'resolv-replace'

或者你也可以把它放到initializers/requires.rb

【讨论】:

    【解决方案3】:

    我在 OSX 上的 rails 和 logstasher 也遇到了同样的问题,直到我读到这篇文章才知道发生了什么。我想我会添加这个,以便其他任何与 logstasher 有相同问题的人都可以找到一些东西......

    `=> Booting Unicorn
    => Rails 4.2.5 application starting in development on http://0.0.0.0:3000
    => Run rails server -h for more startup options
    => Ctrl-C to shutdown server
    Exiting
    /Users/xx/Projects/xx/config/environments/development.rb:80:in 'getaddress': getaddrinfo: nodename nor servname provided, or not known (SocketError)`
    

    修复是将我的机器主机名添加到 /etc/hosts 下的列表中 127.0.0.1

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,我通过编辑 /etc/resolv.conf 解决了这个问题

      之前

      nameserver 10.0.x.x
      search example.com
      

      之后

      #nameserver 10.0.x.x
      nameserver 8.8.8.8
      #search example.com
      

      【讨论】:

      • 以上改动究竟有什么作用?
      【解决方案5】:

      对我来说,删除我的 resolv.conf 中的搜索行就足够了。我的公司自动插入了它自己的域,并且我的主机名不是我的主机文件中的 FQDN。这显然是一个测试环境。

      【讨论】:

        【解决方案6】:

        可能是您的第三方服务网址之一不正确。例如,我们有错误的 SMTP 邮件地址。应用程序中的异常导致它通过电子邮件将错误发​​送给管理员,但由于错误而失败。以下是您知道地址错误的方法:

        irb(main):009:0> Socket.gethostbyname("example.net")
        SocketError: getaddrinfo: Name or service not known
        

        【讨论】:

          【解决方案7】:

          我添加了这一行

          需要'resolv-replace'

          到我的错误来自的控制器文件,它对我有用。希望它也对你有用!

          【讨论】:

            猜你喜欢
            • 2014-03-22
            • 1970-01-01
            • 2021-12-27
            • 2011-02-06
            • 2016-09-05
            • 2020-01-23
            • 2015-09-03
            • 2021-08-07
            • 1970-01-01
            相关资源
            最近更新 更多