Faraday: Logger-Middleware stürzt einfach ab

Erstellt am 28. Okt. 2013  ·  9Kommentare  ·  Quelle: lostisland/faraday

Dieses einfache Programm stürzt ab, weil beim Aufruf des Loggers noch keine Header und kein Body vorhanden sind.

require 'faraday'

conn = Faraday.new(url: "http://google.com") {|config| config.response :logger}
conn.get "/"
/Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/response/logger.rb:31:in `dump_headers': undefined method `map' for nil:NilClass (NoMethodError)
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/response/logger.rb:25:in `block in on_complete'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/logger.rb:376:in `add'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/2.0.0/logger.rb:404:in `debug'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/response/logger.rb:25:in `on_complete'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/response.rb:9:in `block in call'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/response.rb:63:in `on_complete'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/response.rb:8:in `call'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/response/logger.rb:20:in `call'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/connection.rb:253:in `run_request'
    from /Users/synapse/.rbenv/versions/2.0.0-p247/lib/ruby/gems/2.0.0/gems/faraday-0.8.8/lib/faraday/connection.rb:106:in `get'
    from faraday_bug.rb:4:in `<main>'

Hilfreichster Kommentar

Dies wird erwartet. Keine Middleware kann ohne HTTP-Requests, also ohne Adapter, arbeiten.

Faraday.new(url: "http://google.com") do |conn|
  conn.response :logger
  conn.adapter Faraday.default_adapter
end

Alle 9 Kommentare

Dies wird erwartet. Keine Middleware kann ohne HTTP-Requests, also ohne Adapter, arbeiten.

Faraday.new(url: "http://google.com") do |conn|
  conn.response :logger
  conn.adapter Faraday.default_adapter
end

@mislav Obwohl dies das erwartete Verhalten ist, könnte die resultierende Fehlermeldung nützlicher sein.

Ich stimme @sethvargo zu , die Nachricht könnte besser sein.

In meinem Fall ging ich von keinen Parametern zu Faraday.new und fügte dann conn.response :logger . Ich hätte erwartet, dass adapter standardmäßig default_adapter ist, daher war ich ziemlich verwirrt über den neuen Fehler. Es half nicht, dass ich einen anderen Fehler debuggte, also dachte ich, dass dies ein weiteres Symptom meines ursprünglichen Fehlers gewesen sein könnte.

Ich bin auch auf dieses Problem gestoßen. Ich würde sagen, dass das erwartete Verhalten darin besteht, dass Faraday den Standardadapter verwendet, wenn keiner angegeben ist.

Wenn Sie dies lieber nicht tun möchten, würde eine Ausnahme "Adapter nicht angegeben" viel Kopfzerbrechen ersparen.

@mislav Ich wollte genau sagen, was @bluefuton gerade gesagt hat. Ich meine, es heißt "default_adapter", was darauf hindeutet, dass es der Standard ist.

Oh, ich wurde gerade von derselben Sache gebissen. Kryptische Fehlermeldung für einen wahrscheinlich häufigen Fehler. (Ich habe die Adapterspezifikation entfernt, weil ich fälschlicherweise angenommen habe, dass sie nicht explizit sein muss.)

@mislav Würden Sie einen Pull-Request akzeptieren, um den Fehler in etwas wie "Kein Adapter angegeben" zu ändern?

Oder (aber Sie scheinen dies nicht zu wollen) den "Standardadapter" anzunehmen, wenn nichts explizit angegeben ist?

Oh, hey @pengwynn , habe bemerkt, dass du auch Teil dieser Organisation bist. Da Mislav oben nicht geantwortet hat, irgendwelche Gedanken dazu? Möchte aber niemandem auf die Zehen treten – wenn Mislav diese Anrufe macht, möchte ich ihn nicht umgehen :)

Die Botschaft sollte besser sein. Obwohl, wie gesagt, keine Middleware ohne Adapter funktioniert. Das Verbessern der Fehlermeldung speziell für diese Middleware hinterlässt also andere kryptische Fehler in anderer Middleware.

Die richtige Lösung sollte sein, dass Faraday vorzeitig abbricht, wenn ein Connection-Objekt keinen Adapter im Stack enthält. Bitte abonnieren Sie eine von #47, #121, #170

@mislav Aha, danke für die Klarstellung!

Ich denke, ich werde versuchen, einen Pull-Request zu machen, nur um die Fehlermeldung von Logger zu verbessern – es scheint, als könnte es eine ziemlich einfache Änderung sein, die einen allgemeinen Fall verbessern würde. Hoffe das ist in Ordnung.

Ich könnte auch nach der richtigen Lösung suchen, aber es scheint schwieriger zu sein, daher habe ich möglicherweise nicht die Zeit oder die Fähigkeit, dies zu erreichen.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen