복붙노트

[RUBY-ON-RAILS] getaddrinfo는 : 노드 이름도 servname는 제공 여부를 알려

RUBY-ON-RAILS

getaddrinfo는 : 노드 이름도 servname는 제공 여부를 알려

나는 맥 OS X 10.6을 실행하는 컴퓨터에 배포하고있는 루비 레일에 응용 프로그램이 있습니다. 문제가 발생 코드는 delayed_job에 의해 실행됩니다. 이 delayed_job를 통해 실행하면 문제가 발생합니다. 내가 콘솔 (레일 콘솔 생산) 내에서 실행하거나 컬을 통해 직접 API를 호출하는 경우, 그것은 아무 문제없이 작동합니다. 또한, 전체 프로세스 내 개발 환경에서 문제없이 작동합니다.

기본적으로, 코드는 한 곳에서 작동하지만, 일에이 곳에 어떤 이유로 실패합니다. 내가 검색하고 볼 수있는 몇 가지 자원을하지만, 제안 중 어느 것도 적용되지 또는 차이를했습니다. 내가 서버에 로그인하여 명령을 실행하면, 모든 작동합니다. 하지만 카피 스트라 노에 의해 시작 그들이 실행되는 몇 가지 이유 /, 그것은 작동하지 않습니다.

어떤 도움도 대단히 감사합니다.

주의 사항 :

암호:

class CallApi < Struct.new(:num)
  def perform
    log "Entering perform"
    apinum = num || 5
    log "ApiNum = #{apinum}"
    results = attempt(2,10) do
      ActiveSupport::JSON.decode(RestClient.get(API_URL, {:params => {:apinum => apinum}}))
    end
    log "Results retrieved. (count: #{results.count})"
  end

  def log(message)
    Delayed::Worker.logger.info "[CallApi] #{Time.now} - #{message}"
  end
end

환경 구성 (참고 : URL은 있지만, 실제와 동일한 형태의, 가짜) :

API_URL = "http://api.example.org/api_endpoint"
# Originally, I had "http://" before the beginning, but found a
# post mentioning that Net::Http.start didn't like that.
# So I tried it both ways.
# The same error occurs regardless of if the "http://" is there.

오류가 발생하는 경우 전화 :

RestClient.get(API_URL, {:params => {:apinum => apinum}})

오류:

getaddrinfo: nodename nor servname provided, or not known
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:644:in `initialize'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:644:in `open'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:644:in `block in connect'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/timeout.rb:87:in `timeout'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:644:in `connect'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:637:in `do_start'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/net/http.rb:626:in `start'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/rest-client-1.6.1/lib/restclient/request.rb:166:in `transmit'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/rest-client-1.6.1/lib/restclient/request.rb:60:in `execute'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/rest-client-1.6.1/lib/restclient/request.rb:31:in `execute'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/rest-client-1.6.1/lib/restclient.rb:68:in `get'
/private/var/www/project-gemset/releases/20101109002137/lib/call_api.rb:7:in `block in perform'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/attempt-0.2.0/lib/attempt.rb:70:in `attempt'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/attempt-0.2.0/lib/attempt.rb:114:in `attempt'
/private/var/www/project-gemset/releases/20101109002137/lib/call_api.rb:6:in `perform'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/backend/base.rb:77:in `invoke_job'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:118:in `block (2 levels) in run'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/timeout.rb:57:in `timeout'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:118:in `block in run'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/benchmark.rb:309:in `realtime'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:117:in `run'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:176:in `reserve_and_run_one_job'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:102:in `block in work_off'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:101:in `times'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:101:in `work_off'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:76:in `block (2 levels) in start'
/Users/api/.rvm/rubies/ruby-1.9.2-p0/lib/ruby/1.9.1/benchmark.rb:309:in `realtime'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:75:in `block in start'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:72:in `loop'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/worker.rb:72:in `start'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/command.rb:100:in `run'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/command.rb:79:in `block in run_process'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application.rb:250:in `call'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application.rb:250:in `block in start_proc'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/daemonize.rb:199:in `call'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/daemonize.rb:199:in `call_as_daemon'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application.rb:254:in `start_proc'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application.rb:294:in `start'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application_group.rb:159:in `block (2 levels) in start_all'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application_group.rb:158:in `fork'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application_group.rb:158:in `block in start_all'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application_group.rb:157:in `each'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/application_group.rb:157:in `start_all'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/controller.rb:80:in `run'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons.rb:193:in `block in run_proc'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/cmdline.rb:112:in `call'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons/cmdline.rb:112:in `catch_exceptions'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/gems/daemons-1.1.0/lib/daemons.rb:192:in `run_proc'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/command.rb:78:in `run_process'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/command.rb:72:in `block in daemonize'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/command.rb:70:in `times'
/Users/api/.rvm/gems/ruby-1.9.2-p0@project-gemset/bundler/gems/delayed_job-aba9905764c2/lib/delayed/command.rb:70:in `daemonize'
script/delayed_job:5:in `'

해결법

  1. ==============================

    1.DNS 확인이 실패 할 때 오류가 발생합니다. 명령 줄에서 API URL을 wget 용 (또는 컬) 할 수 있는지 확인합니다. DNS 서버를 변경하고 도움이 될 수 있습니다 테스트.

    DNS 확인이 실패 할 때 오류가 발생합니다. 명령 줄에서 API URL을 wget 용 (또는 컬) 할 수 있는지 확인합니다. DNS 서버를 변경하고 도움이 될 수 있습니다 테스트.

  2. ==============================

    2.오늘은 비슷한 상황에 달렸다 - 맥 OS X의 서버에 응용 프로그램을 배포, 그리고 외부 API에 액세스하려고 할 때 'getaddrinfo를'메시지를 수신. 그것은 원래 응용 프로그램을 시작하는 SSH 세션이 더 이상 활성 상태 일 때 오류가 발생하지 않는 것으로 나타났다. 당신이 당신의 서버에 ssh를 수동으로 명령을 실행 (또는 서버를 수동으로 실행)하면 모든 것이 완벽하게 작동하는 이유의 것을 - 당신이 살아있는 당신의 SSH 세션을 유지하는 한,이 오류가 발생하지 않습니다.

    오늘은 비슷한 상황에 달렸다 - 맥 OS X의 서버에 응용 프로그램을 배포, 그리고 외부 API에 액세스하려고 할 때 'getaddrinfo를'메시지를 수신. 그것은 원래 응용 프로그램을 시작하는 SSH 세션이 더 이상 활성 상태 일 때 오류가 발생하지 않는 것으로 나타났다. 당신이 당신의 서버에 ssh를 수동으로 명령을 실행 (또는 서버를 수동으로 실행)하면 모든 것이 완벽하게 작동하는 이유의 것을 - 당신이 살아있는 당신의 SSH 세션을 유지하는 한,이 오류가 발생하지 않습니다.

    이 버그의 OS X의 특질이 있는지 여부, 나는 확실하지 않다. 여기에 솔루션를 알려준 페이지입니다 - http://lists.apple.com/archives/unix-porting/2010/Jul/msg00001.html

    모든 내가 할 'nohup을'을 사용하여 응용 프로그램을 실행하는 내 카피 스트라 노 작업을 업데이트했다 있었다. 변경 그래서

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

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

    나를 위해 트릭을했다.

    이 사람을 도움이되기를 바랍니다 - 알아낼 꽤 고통이었다!

  3. ==============================

    3.URL을 해석 할 때 계획 : 나머지 클라이언트의 위해 RESTClient는 HTTP를 필요로한다. 그것은 HTTP하지 않는 당신을 위해 인터넷 :: HTTP를 호출 부분이 있지만 나머지 클라이언트는 처리한다.

    URL을 해석 할 때 계획 : 나머지 클라이언트의 위해 RESTClient는 HTTP를 필요로한다. 그것은 HTTP하지 않는 당신을 위해 인터넷 :: HTTP를 호출 부분이 있지만 나머지 클라이언트는 처리한다.

    URL이 당신이 도달하려고하는 실제 하나입니다? example.org는 테스트 및 문서 및 도달하는 데 사용되는 유효한 도메인입니다; 나는 'API'와 'api_endpoint "부분이 실패하고 내가 그들에 도달 할 때 볼 것으로 예상 것입니다.

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

    저는 여기에 컬을 사용하여 무엇을 얻을 :

    greg-mbp-wireless:~ greg$ curl api.example.org/api_endpoint
    curl: (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 &quot;example.com&quot;,
    &quot;example.net&quot;,&quot;example.org&quot
      or &quot;example.edu&quot; 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>
    
  4. ==============================

    4.나는 단순히 닫고 터미널을 다시 열어이 문제를 해결했습니다.

    나는 단순히 닫고 터미널을 다시 열어이 문제를 해결했습니다.

  5. ==============================

    5.내 컴퓨터 (맥 산 사자를) 다시 시작하고 문제 자체를 해결했습니다. 그것이 내가 생각하는 인터넷에서 연결이 끊어졌습니다 쉘 생각으로 할 필요가 뭔가.

    내 컴퓨터 (맥 산 사자를) 다시 시작하고 문제 자체를 해결했습니다. 그것이 내가 생각하는 인터넷에서 연결이 끊어졌습니다 쉘 생각으로 할 필요가 뭔가.

    어떤 명확한 방법으로 쉘을 다시 시작하면이 문제도 해결할 수 있습니다. 간단하게 작동하지 않았다 그러나 새로운 세션 / 창을 열어.

  6. ==============================

    6.내가 로컬 호스트가 호스트로 설정이 어떻게 든 설정되지 않은 파일 확인 때 같은 오류가 발생했습니다. 127.0.0.1에 로컬 호스트를 설정하면 그것을 해결.

    내가 로컬 호스트가 호스트로 설정이 어떻게 든 설정되지 않은 파일 확인 때 같은 오류가 발생했습니다. 127.0.0.1에 로컬 호스트를 설정하면 그것을 해결.

    sudo vi /etc/hosts
    >>
    
    127.0.0.1       localhost
    
  7. ==============================

    7.이 문제를 방지하기 위해, 우리는 localhost 대신 127.0.0.1에 바인딩 할 수 있습니다 :

    이 문제를 방지하기 위해, 우리는 localhost 대신 127.0.0.1에 바인딩 할 수 있습니다 :

    빈은 / 서버 -b 127.0.0.1 레일

  8. ==============================

    8.나는 레일이 오류는 관련이없는보고 있었다. 그것은 내 테스트가 너무 높았다 포트 (65535 이상)를 사용하려고했던 밝혀졌다.

    나는 레일이 오류는 관련이없는보고 있었다. 그것은 내 테스트가 너무 높았다 포트 (65535 이상)를 사용하려고했던 밝혀졌다.

    이 코드는 문제의 오류가 발생합니다

    require 'socket'
    Socket.getaddrinfo("127.0.0.1", "65536")
    
  9. ==============================

    9.나를 위해, 나는 실행에 RSpec에 테스트를 얻기 위해 내 local_env.yml 코드의 라인을 변경했다.

    나를 위해, 나는 실행에 RSpec에 테스트를 얻기 위해 내 local_env.yml 코드의 라인을 변경했다.

    나는 원래 가지고 있었다 :

    REDIS_HOST : '반환'

    그것을하는 변경 :

    REDIS_HOST : '로컬 호스트'

    시험은 벌금을 달렸다.

  10. ==============================

    10.인터넷에 연결하면서 개발하는 동안 나는 오류가 발생했습니다. 그것이 그렇게 할 수 없을 때 숨 막혀 그래서 그러나, 나는 필요에 작업 한 웹 사이트는 다른 웹 사이트로 대화 할 수 있습니다. 인터넷에 연결 오류를 해결했습니다.

    인터넷에 연결하면서 개발하는 동안 나는 오류가 발생했습니다. 그것이 그렇게 할 수 없을 때 숨 막혀 그래서 그러나, 나는 필요에 작업 한 웹 사이트는 다른 웹 사이트로 대화 할 수 있습니다. 인터넷에 연결 오류를 해결했습니다.

  11. ==============================

    11.위의 모든 실패하면, UNIX 라인 엔딩으로 변환하거나 수행하려고 :

    위의 모든 실패하면, UNIX 라인 엔딩으로 변환하거나 수행하려고 :

    brew install dos2unix
    sudo dos2unix -c mac /private/etc/hosts
    

    아마 호스트 인코딩이 잘못되었습니다.

    도움이 되었기를 바랍니다

  12. ==============================

    12.나는 갈퀴 DB를 실행하고이 문제를 가지고 있었다 : 만들 수 있습니다. 이 페이지는 DNS 문제로 저를 흘려 주기도한다. 내 VPN 연결을 확인하고이 어떤 이유로 연결이 끊어졌습니다 발견했다. 나는 다시 연결하고 이제 레이크는 차질없이 일했다.

    나는 갈퀴 DB를 실행하고이 문제를 가지고 있었다 : 만들 수 있습니다. 이 페이지는 DNS 문제로 저를 흘려 주기도한다. 내 VPN 연결을 확인하고이 어떤 이유로 연결이 끊어졌습니다 발견했다. 나는 다시 연결하고 이제 레이크는 차질없이 일했다.

  13. ==============================

    13.내 설정 / application.yml 나는이 변경되었습니다

    내 설정 / application.yml 나는이 변경되었습니다

    redis:
        url: "redis://redis:6379/0"
    

    이에

    redis:
        url: "redis://localhost:6379/0"
    

    그것은 나를 위해 작동

  14. from https://stackoverflow.com/questions/4132525/getaddrinfo-nodename-nor-servname-provided-or-not-known by cc-by-sa and MIT license