Faraday: Le middleware Logger plante juste

Créé le 28 oct. 2013  ·  9Commentaires  ·  Source: lostisland/faraday

Ce programme simple plante car lorsque l'enregistreur est appelé, il n'y a pas encore d'en-têtes et de corps.

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>'

Commentaire le plus utile

C'est prévu. Aucun middleware ne peut fonctionner sans que des requêtes HTTP soient effectuées, c'est-à-dire sans adaptateur.

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

Tous les 9 commentaires

C'est prévu. Aucun middleware ne peut fonctionner sans que des requêtes HTTP soient effectuées, c'est-à-dire sans adaptateur.

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

@mislav bien qu'il

Je suis d'accord avec @sethvargo , le message pourrait être meilleur.

Dans mon cas, je suis passé de aucun paramètre à Faraday.new puis j'ai ajouté conn.response :logger . Je me serais attendu à ce que le adapter soit le default_adapter par défaut, j'étais donc raisonnablement confus face à la nouvelle erreur. Cela n'a pas aidé que je débogue une autre erreur, alors j'ai pensé que cela aurait pu être un autre symptôme de mon erreur d'origine.

J'ai également rencontré ce problème. Je dirais que le comportement attendu est que Faraday utilise l'adaptateur par défaut si aucun n'est spécifié.

Si vous préférez ne pas le faire, une exception « adaptateur non spécifié » vous évitera de vous gratter la tête.

@mislav J'étais sur le point de dire exactement ce que @bluefuton vient de dire. Je veux dire qu'il s'appelle "default_adapter", ce qui suggère que c'est celui par défaut.

Oh, j'ai été mordu par la même chose. Message d'erreur cryptique pour ce qui est probablement une erreur courante. (J'ai supprimé la spécification de l'adaptateur car j'ai supposé à tort qu'elle n'avait pas besoin d'être explicite.)

@mislav Accepteriez-vous une demande d'extraction pour modifier l'erreur en quelque chose comme "Aucun adaptateur spécifié" ?

Ou (mais vous semblez ne pas vouloir cela) supposer "l'adaptateur par défaut" si rien n'est explicitement spécifié?

Oh, salut @pengwynn ,

Le message devrait être meilleur. Bien que, comme je l'ai dit, aucun middleware ne fonctionnera réellement sans adaptateur. Ainsi, l'amélioration du message d'erreur spécifiquement pour ce middleware laisse d'autres défaillances cryptiques dans d'autres middleware.

La solution appropriée devrait être que Faraday abandonne prématurément lorsqu'un objet Connection n'inclut pas d'adaptateur dans la pile. Veuillez vous abonner à l'un des #47, #121, #170

@mislav Aha, merci d'avoir clarifié !

Je pense que je vais essayer de faire une demande d'extraction juste pour améliorer le message d'erreur de l'enregistreur - il semble que cela pourrait être un changement assez simple qui améliorerait un piège commun. J'espère que ça va.

Je pourrais aussi chercher la solution appropriée, mais cela semble plus difficile, donc je n'ai peut-être pas le temps ou les compétences pour y parvenir.

Cette page vous a été utile?
0 / 5 - 0 notes