動作していない ActiveResource 呼び出しをデバッグしようとしています。
ActiveResource が行っているリクエストに対する HTTP レスポンスを表示する最良の方法は何ですか?
動作していない ActiveResource 呼び出しをデバッグしようとしています。
ActiveResource が行っているリクエストに対する HTTP レスポンスを表示する最良の方法は何ですか?
Monkey 接続にパッチを適用して、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を気に入っているのは、Web ブラウザ クライアント エンド (通常は開発マシン) でリッスンを開始してから、ページ リクエストを実行できるからです。次に、HTTP パケットを見つけて右クリックし、[会話をたどる] をクリックして、HTTP とヘッダーのやり取りを確認します。
それは簡単です。戻ってくる応答を見てください。:)
2 つのオプション:
puts response.inspect適切な場所に a を配置します。削除することを忘れないでください。後者のオプションのばかげた例を次に示します。
# 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 ソース ファイルにあると想像してください。2 番目のクラス定義は、アプリケーションのどこかにあります。
$ irb -r openclasses.rb 
>> Network.new.get
I'm a request!
=> "I'm a request!"
印刷してから返すことがわかります。いいですね。
(そして、私の単純な例では Rails を使用していないため使用していませんがalias_method_chain、エイリアス呼び出しを組み合わせて確認してください。)
これは、サーバーも制御している場合にのみ機能します。
サーバーログをたどり、呼び出された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]
それをFirefoxで開きます。サーバーが本当にRESTful(つまりステートレス)である場合、AResと同じ応答が得られます。
または、正確な内部がわからないときに物事に取り掛かる私の方法は、文字通り「デバッガー」ステートメントをスローし、「script / server --debugger」を使用してサーバーを起動し、コードをステップスルーすることです。 m必要な場所で、IRBで検査を開始します.....それは役立つかもしれません(ちょっとルークところで)
おそらく最善の方法は、トラフィック スニファを使用することです。
(これは完全に機能します...私の場合、見たいトラフィックが暗号化されていることを除いて.D'oh!)