Wie kann ich die HTTP-Antwort auf eine Anfrage Active?
-
03-07-2019 - |
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?
anzuzeigenLö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.
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/