Faraday: El middleware de Logger simplemente falla

Creado en 28 oct. 2013  ·  9Comentarios  ·  Fuente: lostisland/faraday

Este programa simple se bloquea porque cuando se llama al registrador, todavía no hay encabezados ni cuerpo.

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

Comentario más útil

Se esperaba esto. Ninguno de los middleware puede funcionar sin que se realicen solicitudes HTTP, es decir, sin un adaptador.

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

Todos 9 comentarios

Se esperaba esto. Ninguno de los middleware puede funcionar sin que se realicen solicitudes HTTP, es decir, sin un adaptador.

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

@mislav si bien este es el comportamiento esperado, el mensaje de error resultante podría ser más útil.

Estoy de acuerdo con @sethvargo , el mensaje podría ser mejor.

En mi caso, pasé de no tener parámetros a Faraday.new y luego agregué conn.response :logger . Habría esperado que adapter fuera el default_adapter de forma predeterminada, por lo que estaba razonablemente confundido con el nuevo error. No ayudó que estuviera depurando otro error, así que pensé que este podría haber sido otro síntoma de mi error original.

También me encontré con este problema. Yo diría que el comportamiento esperado es que Faraday usa el adaptador predeterminado si no se especifica uno.

Si prefiere no hacer esto, una excepción de 'adaptador no especificado' le evitaría muchos problemas.

@mislav Estaba a punto de decir exactamente lo que acaba de decir @bluefuton . Quiero decir que se llama "default_adapter", lo que sugiere que es el predeterminado.

Oh, me mordió lo mismo. Mensaje de error críptico de lo que probablemente sea un error común. (Eliminé la especificación del adaptador porque asumí erróneamente que no necesitaba ser explícito).

@mislav ¿Aceptarías una solicitud de extracción para cambiar el error a algo como "No se ha especificado ningún adaptador"?

¿O (pero parece que no quiere esto) asumir el "adaptador predeterminado" si no se especifica nada explícitamente?

Oh, hola @pengwynn , noté que también eres parte de esta organización. Dado que Mislav no respondió arriba, ¿alguna idea sobre esto? Sin embargo, no quiero pisar los dedos de los pies de nadie: si Mislav hace estas llamadas, no quiero pasarlo por alto :)

El mensaje debería ser mejor. Aunque, como dije, ninguno de los middleware funcionará sin un adaptador. Por lo tanto, mejorar el mensaje de error específicamente para este middleware deja otras fallas crípticas en otro middleware.

La solución adecuada debería ser que Faraday aborte antes de tiempo cuando un objeto Connection no incluye un adaptador en la pila. Suscríbase a uno de los # 47, # 121, # 170

@mislav Aha, ¡gracias por aclarar!

Creo que intentaré hacer una solicitud de extracción solo para mejorar el mensaje de error del registrador; parece que podría ser un cambio bastante simple que mejoraría un problema común. Espero que esté bien.

También podría buscar la solución adecuada, pero parece más desafiante, por lo que es posible que no tenga el tiempo o la habilidad para lograrlo.

¿Fue útil esta página
0 / 5 - 0 calificaciones

Temas relacionados

ryanbyon picture ryanbyon  ·  3Comentarios

mokolabs picture mokolabs  ·  3Comentarios

jordansissel picture jordansissel  ·  5Comentarios

JasonBarnabe picture JasonBarnabe  ·  4Comentarios

ioquatix picture ioquatix  ·  4Comentarios