getaddrinfo: nodename nor servname provided, or not known getaddrinfo: nodename nor servname provided, or not known ruby-on-rails ruby-on-rails

getaddrinfo: nodename nor servname provided, or not known


The error occurs when the DNS resolution fails. Check if you can wget (or curl) the api url from the command line. Changing the DNS server and testing it might help.


I ran into a similar situation today - deploying an app to a mac os x server, and receiving the 'getaddrinfo' message when I tried to access an external api. It turns out that the error occurs when the ssh session that originally launched the app is no longer active. That's why everything works perfectly if you ssh into your server and run commands manually (or launch the server manually) - as long as you keep your ssh session alive, this error won't occur.

Whether this is a bug or a quirk in OS X, I'm not sure. Here's the page that led me to the solution - http://lists.apple.com/archives/unix-porting/2010/Jul/msg00001.html

All I had to do was update my capistrano task to launch the app using 'nohup'. So changing

run "cd #{current_path} && RAILS_ENV=production unicorn_rails -c config/unicorn.rb -D"

to

run "cd #{current_path} && RAILS_ENV=production nohup unicorn_rails -c config/unicorn.rb -D"

did the trick for me.

Hope this helps somebody - it was quite a pain to figure out!


rest-client's RestClient needs the http: scheme when resolving the URL. It calls Net::HTTP for you, which doesn't want the http: part, but rest-client takes care of that.

Is the URL the actual one you are attempting to reach? example.org is a valid domain used for testing and documentation and is reachable; I'd expect the "api" and "api_endpoint" parts to fail and see that when I try to reach them.

require 'socket'IPSocket.getaddress('example.org') # => "2620:0:2d0:200::10"IPSocket.getaddress('api.example.org') # => # ~> -:7:in `getaddress': getaddrinfo: nodename nor servname provided, or not known (SocketError)# ~>    from -:7:in `<main>'

Here's what I get using Curl:

greg-mbp-wireless:~ greg$ curl api.example.org/api_endpointcurl: (6) Couldn't resolve host 'api.example.org'greg-mbp-wireless:~ greg$ curl example.org/api_endpoint<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"><html><head><title>404 Not Found</title></head><body><h1>Not Found</h1><p>The requested URL /api_endpoint was not found on this server.</p><hr><address>Apache Server at example.org Port 80</address></body></html>greg-mbp-wireless:~ greg$ curl example.org<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><HTML><HEAD>  <META http-equiv="Content-Type" content="text/html; charset=utf-8">  <TITLE>Example Web Page</TITLE></HEAD> <body>  <p>You have reached this web page by typing "example.com","example.net","example.org&quot  or "example.edu" into your web browser.</p><p>These domain names are reserved for use in documentation and are not available   for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC   2606</a>, Section 3.</p></BODY></HTML>