動作していない 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!)