web-dev-qa-db-fra.com

SocketError (getaddrinfo: nom ou service inconnu) - Développement de Sunspot/Solr Rails

J'ai eu beaucoup de mal à déployer mon application Rails 3.0.10 sur un serveur Ubuntu 10.04 avec Passenger, Capistrano, Nginx et MySQL (et encore plus de problèmes avec Apache2). Après l'abaissement de rake à 0.8.7, cela fonctionne enfin, mais Sunspot/Solr ne fonctionne plus dans mon environnement de développement. Le serveur sunspot_solr est en cours d'exécution et je peux obtenir l'URL du serveur et me connecter via le navigateur. L'URL est la même que dans sunspot.yml. Je n'ai aucune idée de ce que j'ai fait qui peut avoir causé le problème. J'ai eu le même problème avec une tache solaire plus tôt (avant de dégrader le râteau). Puis il a soudainement recommencé à fonctionner. Je ne sais pas pourquoi ... J'ai essayé deux versions de Sunspot (1.2.1 et 1.3.0). Les deux ont fonctionné plus tôt, mais plus maintenant.

C'est le message d'erreur que je reçois:

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)

Le contrôleur est un peu en désordre alors je viens d'inclure la partie pertinente:

@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

Je n'ai rien changé dans le contrôleur depuis qu'il fonctionnait. 

Mon 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'

Mon rakefile:

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

Skolearkivet::Application.load_tasks
13
Johan Hovda

juste une supposition sauvage, une chance que vous utilisiez localhost comme nom d'hôte? Essayez de remplacer localhost par 127.0.0.1

27
Roger

J'ai ajouté cette ligne en haut du fichier app/controllers/search_controller.rb 

require 'resolv-replace'

Ou bien vous pouvez le mettre aux initialiseurs/require.rb

8
ramdanplusplus

J'ai eu le même problème avec Rails et logstasher sur OSX, je ne pouvais pas comprendre ce qui se passait jusqu'à ce que je lise ce post. Je pensais que j'ajouterais ceci pour que quiconque ayant le même type de problème avec Logstasher puisse trouver quelque chose ...

`=> 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)`

Le correctif consistait à ajouter le nom d’hôte de mon ordinateur à la liste sous/etc/hosts pour 127.0.0.1

1
oktobermoon

J'ai eu un problème similaire, que j'ai corrigé en modifiant le fichier /etc/resolv.conf

avant

nameserver 10.0.x.x
search example.com

après

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

Pour moi, il suffisait de supprimer la ligne de recherche dans mon resolv.conf. Ma société a inséré automatiquement son propre domaine et mon nom d’hôte n’était pas un nom de domaine complet dans mon fichier hosts. Ceci est un environnement de test évidemment.

1
Marco Mazzucco

Il se peut que l’une des URL de vos services tiers soit incorrecte. Par exemple, nous avons eu la mauvaise adresse de messagerie SMTP. Une exception dans l'application a provoqué l'envoi de l'erreur par courrier électronique aux administrateurs, qui a échoué. Voici comment vous savez quand c'est une mauvaise adresse:

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

J'ai ajouté cette ligne 

nécessite 'resolv-replace'

à mon fichier de contrôleur d'où l'erreur venait et cela a fonctionné pour moi. J'espère que ça marchera pour toi aussi!

0
Linda Kadz