SocketError (getaddrinfo: имя или служба неизвестны) — разработка Sunspot/Solr Rails

У меня было много проблем с развертыванием моего приложения rails 3.0.10 на сервере Ubuntu 10.04 с Passenger, Capistrano, nginx и MySQL (и еще больше проблем с apache2). После понижения рейка до 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

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

Мой гемфайл:

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'

Мой рейкфайл:

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

Skolearkivet::Application.load_tasks

person Johan Hovda    schedule 11.03.2012    source источник
comment
выложи пожалуйста исходник контроллера   -  person Roger    schedule 11.03.2012
comment
отредактировал мою публикацию, включив в нее соответствующие части контроллера   -  person Johan Hovda    schedule 11.03.2012
comment
я думаю, нам нужно больше, так как в модели срабатывает ошибка: app/models/resource.rb:128:   -  person Roger    schedule 11.03.2012
comment
Все в контроллере и модели работает нормально. Единственное, что я изменил, это такие файлы, как gemfile, rakefile и т. д. Я отредактирую свой первоначальный пост, чтобы включить их.   -  person Johan Hovda    schedule 11.03.2012


Ответы (7)


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

person Roger    schedule 11.03.2012
comment
а, работает? Ницца. да, понятия не имею, но эта штука с локальным хостом иногда бывает странной... - person Roger; 11.03.2012
comment
Да, это работает! Я предполагаю, что когда приложение развернуто, «localhost» указывает на localhost на удаленном сервере, а не на машине разработки. Иначе я тоже не могу понять. - person Johan Hovda; 11.03.2012
comment
У меня та же проблема, но мой server_name не является локальным хостом, какой-нибудь совет? - person Sam Baumgarten; 05.04.2013
comment
@SamBaumgarten ты когда-нибудь решал эту проблему? Вы проверили файл /etc/hosts? - person Roger; 16.07.2013
comment
У меня возникли проблемы с изменением этого имени хоста, поскольку Рор не использует Apache. Должен ли localhost быть сопоставлен с 127.0.0.1 в файле hosts или что вы имеете в виду? - person Rápli András; 22.04.2014
comment
@RápliAndrás не уверен, что ты имеешь в виду. Это зависит от вашей настройки. Но обычно вы запускаете пассажира на своем локальном хосте (который является экземпляром вашего приложения RoR). Apache (или NGINX) перенаправляет запрос на ваш локальный хост (то есть пассажир), а затем обратно клиенту. - person Roger; 22.04.2014
comment
Добавив мою глупую причину получения этой ошибки, я не был подключен к vpn, поэтому мой скрипт не смог найти jira..smh - person Siddhartha; 30.05.2014
comment
Я по ошибке удалил запись localhost из hosts - person Amol Pujari; 09.08.2014
comment
Я получил это, когда установил в конфигурации Redis в rails значение localhost вместо 127.0.0.1. +1 - person film42; 17.05.2016

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

require 'resolv-replace'

Или же вы можете поместить его в initializers/requires.rb

person ramdanplusplus    schedule 12.06.2015

У меня была такая же проблема с рельсами и 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.

person oktobermoon    schedule 19.07.2016

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

до

nameserver 10.0.x.x
search example.com

после

#nameserver 10.0.x.x
nameserver 8.8.8.8
#search example.com
person spuder    schedule 15.01.2015
comment
что на самом деле делают вышеуказанные изменения? - person BKSpurgeon; 16.04.2020

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

person Marco Mazzucco    schedule 29.09.2017

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

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

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

требуют «разрешить-заменить»

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

person Linda Kadz    schedule 08.08.2018