Frage

Ich versuche, einen Active Anruf zu debuggen, die nicht funktionieren.

Was ist der beste Weg, um die HTTP-Antwort auf die Anfrage Active macht?

anzuzeigen
War es hilfreich?

Lösung

Es ist einfach. Schauen Sie sich nur die Antwort, die zurückkommt. :)

Zwei Optionen:

  • Sie haben die Quelldatei auf Ihrem Computer. Bearbeite es. Setzen Sie ein puts response.inspect an der entsprechenden Stelle. Denken Sie daran, es zu entfernen.
  • hat Ruby-Open-Klassen. Finden Sie die richtige Methode und neu definieren, es zu tun genau das, was Sie wollen, oder Aliasnamen verwenden, und rufen Sie Verkettungs dies zu tun. Wahrscheinlich gibt es eine Methode, die Antwort zurückgibt -. Packen, ausdrucken und dann zurückkehren

Hier ist ein dummes Beispiel für die letztere Option.

# 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

Stellen Sie sich vor der ersten Klassendefinition in den Activequelldateien ist. Die zweite Klasse Definition ist in der Anwendung irgendwo.

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

Sie sehen, dass es druckt und dann gibt es zurück. Ordentlich, nicht wahr?

(Und obwohl mein einfaches Beispiel der es nicht verwendet werden, da es nicht mit Rails Besuche alias_method_chain Ihre alias Anrufe zu kombinieren.)

Andere Tipps

Monkey die Verbindung Patch aktivieren Net :: HTTP Debug-Modus. Siehe https://gist.github.com/591601 - ich schrieb es genau dieses Problem zu lösen. Das Hinzufügen dieser Kern auf Ihre Rails-Anwendung gibt Ihnen Net::HTTP.enable_debug! und Net::HTTP.disable_debug! die Sie verwenden können Debug-Informationen zu drucken.

Net :: HTTP Debug-Modus ist unsicher und nicht in der Produktion verwendet werden soll, ist aber sehr informativ für die Fehlersuche.

Fügen Sie eine neue Datei namens config/initializers/ mit folgendem Inhalt '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

Dies wird den gesamten Netzwerkverkehr auf $ stderr drucken.

Ich mag Wireshark, weil Sie es hören auf dem Web-Browser-Client Ende beginnen (in der Regel Ihre Entwicklungsmaschine ) und dann eine Seitenanforderung tun. Dann können Sie die HTTP-Pakete finden, rechts klicken und „Follow-Dialog“, um die HTTP-Header zu sehen mit hin und her.

Dies funktioniert nur, wenn Sie auch den Server steuern:

das Serverprotokoll und Fisch aus der URL folgen, der aufgerufen wurde:

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]

und öffnen Sie dann, dass in Firefox. Wenn der Server truely RESTful ist (dh. Stateless) Sie erhalten die gleiche Antwort erhalten wie ARES hat.

Oder meine Methode in den Dinge bekommen, wenn ich weiß nicht, die genaue Interna ist buchstäblich nur in einer „Debugger“ Anweisung zu werfen, den Server mit „script / server --debugger“ starten und dann Schritt durch den Code bis ich an der Stelle möchte ich bin, dann in IRB eine Inspektion genau dort beginnen ....., die helfen könnten (hey Luke btw)

Vielleicht ist der beste Weg ist, einen Verkehr Sniffer zu verwenden.

(Was würde funktionieren völlig ... außer in meinem Fall der Verkehr Ich möchte sehen, ist verschlüsselt. D'oh!)

ich würde tcpflow hier der Verkehr geht über den Draht zu beobachten, anstatt meine App ausgeben es Patchen.

die Firefox-Plugin Live-HTTP-Header ( http://livehttpheaders.mozdev.org/ ) ist groß dafür. Oder Sie können eine Website-Tool wie http://www.httpviewer.net/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top