문제

나는 디버깅하는 ActiveResource 는 작동하지 않습니다.

무엇을 볼 수있는 가장 좋은 방법은 HTTP 요청에 대한 응답 ActiveResource 은?

도움이 되었습니까?

해결책

그것은 간단합니다. 돌아 오는 응답 만 살펴보십시오. :)

두 가지 옵션 :

  • 컴퓨터에 소스 파일이 있습니다. 편집하십시오. a puts response.inspect 적절한 장소에서. 제거해야합니다.
  • 루비에는 오픈 클래스가 있습니다. 올바른 방법을 찾고 원하는대로 정확하게 수행하거나 별명을 사용하고 연쇄 체인을 사용하여이를 재정의하십시오. 응답을 반환하는 메소드가있을 수 있습니다. 가져 가서 인쇄 한 다음 반환하십시오.

다음은 후자의 옵션에 대한 어리석은 예입니다.

# Somewhere buried in ActiveResource:
class Network
  def get
    return get_request
  end

  def get_request
    "I'm a request!"
  end
end

# Somewhere in your source files:
class Network
  def print_request
    request = old_get_request
    puts request
    request
  end
  alias :old_get_request :get_request
  alias :get_request :print_request
end

첫 번째 클래스 정의가 ActiveRecord 소스 파일에 있다고 상상해보십시오. 두 번째 클래스 정의는 어딘가에 응용 프로그램에 있습니다.

$ irb -r openclasses.rb 
>> Network.new.get
I'm a request!
=> "I'm a request!"

인쇄 한 다음 반환하는 것을 볼 수 있습니다. 깔끔 했어?

(그리고 내 간단한 예제는 레일을 사용하지 않기 때문에 사용하지 않지만 확인하십시오. alias_method_chain 별칭 호출을 결합하려면.)

다른 팁

원숭이 패치 Net :: HTTP 디버그 모드를 활성화하기위한 연결. 보다 https://gist.github.com/591601 - 나는이 문제를 정확하게 해결하기 위해 그것을 썼다. Rails 앱 에이 요점을 추가하면됩니다. Net::HTTP.enable_debug! 그리고 Net::HTTP.disable_debug! 디버그 정보를 인쇄하는 데 사용할 수 있습니다.

Net :: HTTP 디버그 모드는 안전하지 않으며 생산에 사용해서는 안되지만 디버깅에 매우 유익합니다.

새 파일을 추가하십시오 config/initializers/ ~라고 불리는 'debug_connection.rb' 다음 내용으로 :

class ActiveResource::Connection
  # Creates new Net::HTTP instance for communication with
  # remote service and resources.
  def http
    http = Net::HTTP.new(@site.host, @site.port)
    http.use_ssl = @site.is_a?(URI::HTTPS)
    http.verify_mode = OpenSSL::SSL::VERIFY_NONE if http.use_ssl
    http.read_timeout = @timeout if @timeout
    # Here's the addition that allows you to see the output
    http.set_debug_output $stderr
    return http
  end
end

이것은 전체 네트워크 트래픽을 $ stderr로 인쇄합니다.

좋아요 Wireshark 웹 브라우저 클라이언트 엔드 (일반적으로 개발 기계)에서 듣기 시작한 다음 페이지 요청을 수행 할 수 있기 때문입니다. 그런 다음 HTTP 패킷을 찾아 마우스 오른쪽 버튼을 클릭하고 "대화를 따르십시오"를 찾으려면 헤더가 앞뒤로 이동하는 HTTP를 볼 수 있습니다.

이 경우 당신은 또한 당신을 제어 server:

따라 서버 로그고 물고기는 URL 을 호출되었:

Completed in 0.26889 (3 reqs/sec) | Rendering: 0.00036 (0%) | DB: 0.02424 (9%) | 200 OK [http://localhost/notifications/summary.xml?person_id=25738]

를 열고 다음에 들어 있습니다.는 경우 서버가 진정으로 편안(즉,.stateless)을 얻을 것 같은 응답을 아레스았다.

또는 정확한 내부를 알지 못할 때 사물에 들어가는 방법은 문자 그대로 "디버거"문을 던지고 "Script/Server -DeBugger"를 사용하여 서버를 시작한 다음 I SLE I COLE을 통해 코드를 진행하는 것입니다. 내가 원하는 곳에서 M, IRB에서 바로 검사를 시작합니다 ..... 도움이 될 수 있습니다 (Hey Luke BTW)

아마도 가장 좋은 방법은 트래픽 스나이퍼를 사용하는 것입니다.

(완전히 작동 할 것입니다 ... 내 경우를 제외하고 내가보고 싶은 트래픽은 암호화됩니다. d 'oh!)

나는 사용할 것이다 tcpflow 여기에서 트래픽이 전선을 넘어서서 내 앱을 출력하지 않고 전선을 넘어가는 것을 보았습니다.

Firefox 플러그인 라이브 HTTP 헤더 (http://livehttpheaders.mozdev.org/) 이것은 이것에 좋습니다. 또는 웹 사이트 도구와 같은 웹 사이트 도구를 사용할 수 있습니다 http://www.httpviewer.net/

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top