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" 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>