2009-11-19 6 views
1

처음 질문을 묻습니다. 친절하십시오!Ruby 스크립트의 작업 페이지에서 404 HTTPError 수신

전 도메인 (100 개 이상)의 콘텐츠를 처리하는 레일 애플리케이션이 있습니다. 각 도메인은 내 앱이 호스팅되는 곳 (Heroku, 관심이 있다면) 또는 호스팅 된 원래 장소를 가리 킵니다. 도메인이 준비 될 때마다 heroku 서버를 가리켜 야하므로 내 앱이 콘텐츠를 제공 할 수 있습니다.

도메인이 원래 위치에서 내 응용 프로그램으로 성공적으로 변경되었는지 확인하려면 해당 항목에 포함 된 특수 숨겨진 태그를 찾는 스크립트를 작성하고 있습니다. 태그를 찾으면 도메인이 내 앱을 가리키고 있습니다. 그렇지 않은 경우 변경되지 않았으며 기록됩니다.

적어도 하나의 도메인에 대해서는 지금까지 스크립트에 404 OpenURI :: HTTPError 예외가 발생했습니다. 나는 사이트를 잘 방문 할 수 있고 컬을 통해 얻을 수도 있기 때문에 이상합니다. 누구도 왜 작업 사이트에서 이와 같은 오류가 발생하는지 알 수 있습니까? 중요한 스 니펫은 다음과 같습니다.

require 'rubygems' 
require 'open-uri' 
require 'hpricot' 
... 
url = "http://www.#{domainname}.com" 
doc = Hpricot(open(url)) #<---- Problem right here. 
... 

감사합니다.

+0

답변을 요청하거나 게시 할 때 소스 코드를 소스 코드 형식으로 지정하십시오. (나는 이번에 너에게 해줬 다.) –

+0

고마워. 나는 앞으로 그렇게 할 것입니다. –

답변

0

안녕하세요! 여기

내 디버깅 방법이 될 것입니다 : 당신은 혼자가 오픈 URI와 IRB에 복제 할 수 있는지 확인

  1. , 더 Hpricot을하지 :

$ irb -rubygems -ropen-uri

>> open('http://www.somedomain.com')

  1. Heroku 로그를보고 서버에 닿아도되는지 확인하십시오.
  2. 원래 서버의 로그에서 같은 것을 찾으십시오.
  3. Wireshark과 같은 것을 열어서 HTTP 트랜잭션을 확인하고 404가 실제로 돌아 오는지 확인하십시오.

시작하여 결과를 다시 받으십시오.

+0

나는 irb로 해봤 다. Hpricot없이 같은 일을한다. 내가 요구하고있는 사이트는 아직 heroku 버전을 가리키고 있지 않기 때문에 (좋은 테스트를 만든 이유이며 수정을 위해 기록해야 함)이 스크립트는이 오류에서 멈추고 있습니다. 호기심이 생길 경우, 내가 얻으려고하는 사이트는 http://www.aquarium-equipment.com입니다. 루니를 열려면 루비가 필요해! –

+0

좋아, 나는 진전을 보았다. 나는 open-uri 접근 방식을 포기하고 Net :: HTTP를 사용하기로 결정했다. 이로 인해 오류 대신 출력이 생성됩니다. 그러나 응답은 404 오류입니다! 이 사이트는 완전히 방문 할 수 있으므로 그 이유를 모르겠습니다. curl은 올바른 응답을 얻었으므로 루비와 관련이 있거나 루비가 서버와 상호 작용하는 방식이 있다고 가정해야합니다. –

+0

서버에서 User-Agent를 기다리고 있습니다. 기본적으로 OpenURI는 OpenURI를 보내지 않습니다. 이것은 작동합니다 :'open ('http://www.aquarium-equipment.com', 'User-Agent "=>"Ruby/# {RUBY_VERSION} ") –

관련 문제