SocketError (getaddrinfo: имя или служба неизвестна) - разработка Sunspot / Solr Rails - PullRequest
13 голосов
/ 11 марта 2012

У меня было много проблем с развертыванием моего приложения rails 3.0.10 на сервере Ubuntu 10.04 с Passenger, Capistrano, nginx и MySQL (и еще больше проблем с apache2).После понижения rake до 0.8.7 он наконец заработал, но теперь Sunspot / Solr не работает в моей среде разработки.Сервер sunspot_solr запущен, и я могу получить URL-адрес сервера и подключиться к нему через браузер.URL-адрес такой же, как в sunspot.yml.Я понятия не имею, что я сделал, что могло вызвать проблему.У меня была такая же проблема с солнечным пятном ранее (до того, как я понизил рейк).Тогда это внезапно начало работать снова.Я не знаю почему ... Я пробовал две версии 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

Я ничего не менял в контроллере, так как он работал.

Мой gemfile:

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

Ответы [ 7 ]

27 голосов
/ 11 марта 2012

просто дикая догадка, есть ли шанс, что вы используете localhost в качестве имени хоста? Попробуйте изменить localhost на 127.0.0.1

9 голосов
/ 13 июня 2015

Я добавил эту строку в начало файла app / controllers / search_controller.rb

require 'resolv-replace'

Или, в качестве альтернативы, вы можете поместить его в initializers / require.rb

1 голос
/ 29 сентября 2017

Для меня было достаточно удалить строку поиска в моем resolv.conf.Моя компания автоматически добавила свой собственный домен, и мое имя хоста не было полным доменным именем в моем файле hosts.Это тестовая среда, очевидно.

1 голос
/ 19 июля 2016

У меня была такая же проблема с rails и logstasher на OSX, я не мог понять, что происходит, пока не прочитал этот пост.Думаю, я бы добавил это, чтобы любой другой, имеющий такую ​​же проблему с 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

1 голос
/ 15 января 2015

У меня была похожая проблема, которую я обошел, отредактировав /etc/resolv.conf

до

nameserver 10.0.x.x
search example.com

после

#nameserver 10.0.x.x
nameserver 8.8.8.8
#search example.com
0 голосов
/ 08 августа 2018

Я добавил эту строку

require 'resolv-replace'

в файл моего контроллера, откуда пришла ошибка, и она работала для меня.Надеюсь, что это работает и для вас!

0 голосов
/ 01 мая 2018

Возможно, один из ваших сторонних сервисных URL неверен. Например, у нас был неправильный адрес электронной почты SMTP. Исключение в приложении привело к тому, что оно отправило администратору сообщение об ошибке, и оно не удалось с ошибкой. Вот как вы знаете, когда это плохой адрес:

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