7

動作していない ActiveResource 呼び出しをデバッグしようとしています。

ActiveResource が行っているリクエストに対する HTTP レスポンスを表示する最良の方法は何ですか?

4

9 に答える 9

14

Monkey 接続にパッチを適用して、Net::HTTP デバッグ モードを有効にします。https://gist.github.com/591601を参照してください - この問題を正確に解決するために書きました。この要点を Rails アプリに追加するNet::HTTP.enable_debug!Net::HTTP.disable_debug!、デバッグ情報を出力するために使用できるようになります。

Net::HTTP デバッグ モードは安全ではないため、本番環境では使用しないでください。ただし、デバッグには非常に有益です。

于 2011-08-24T12:30:03.043 に答える
4

次の内容で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 に出力されます。

于 2011-11-07T18:25:43.070 に答える
3

私がWiresharkを気に入っているのは、Web ブラウザ クライアント エンド (通常は開発マシン) でリッスンを開始してから、ページ リクエストを実行できるからです。次に、HTTP パケットを見つけて右クリックし、[会話をたどる] をクリックして、HTTP とヘッダーのやり取りを確認します。

于 2008-10-23T02:58:41.563 に答える
3

それは簡単です。戻ってくる応答を見てください。:)

2 つのオプション:

  • コンピューターにソース ファイルがあります。編集します。puts response.inspect適切な場所に a を配置します。削除することを忘れないでください。
  • Ruby にはオープンクラスがあります。適切なメソッドを見つけて、それを再定義して正確に実行するか、エイリアスを使用してこれを実行します。おそらく、応答を返すメソッドがあります-それを取得し、印刷してから返します。

後者のオプションのばかげた例を次に示します。

# 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、エイリアス呼び出しを組み合わせて確認してください。)

于 2008-10-25T13:09:11.073 に答える
1

これは、サーバーも制御している場合にのみ機能します。

サーバーログをたどり、呼び出された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と同じ応答が得られます。

于 2008-10-26T09:20:24.140 に答える
0

または、正確な内部がわからないときに物事に取り掛かる私の方法は、文字通り「デバッガー」ステートメントをスローし、「script / server --debugger」を使用してサーバーを起動し、コードをステップスルーすることです。 m必要な場所で、IRBで検査を開始します.....それは役立つかもしれません(ちょっとルークところで)

于 2008-10-23T02:06:04.587 に答える
0

おそらく最善の方法は、トラフィック スニファを使用することです。

(これは完全に機能します...私の場合、見たいトラフィックが暗号化されていることを除いて.D'oh!)

于 2008-10-22T23:31:21.093 に答える