Faraday: O middleware do Logger simplesmente trava

Criado em 28 out. 2013  ·  9Comentários  ·  Fonte: lostisland/faraday

Este programa simples trava porque, quando o logger é chamado, ainda não há cabeçalhos e corpo.

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

Comentários muito úteis

Isso é esperado. Nenhum middleware pode funcionar sem que as solicitações HTTP sejam feitas, ou seja, sem um adaptador.

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

Todos 9 comentários

Isso é esperado. Nenhum middleware pode funcionar sem que as solicitações HTTP sejam feitas, ou seja, sem um adaptador.

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

@mislav embora este seja o comportamento esperado, a mensagem de erro resultante pode ser mais útil.

Concordo com @sethvargo , a mensagem poderia ser melhor.

No meu caso, passei de nenhum parâmetro para Faraday.new e, em seguida, adicionei conn.response :logger . Eu esperava que adapter fosse default_adapter por padrão, então fiquei razoavelmente confuso com o novo erro. Não ajudou em nada o fato de eu estar depurando outro erro, então pensei que isso pudesse ser outro sintoma do meu erro original.

Eu também tive esse problema. Eu diria que o comportamento esperado é que Faraday use o adaptador padrão se nenhum não for especificado.

Se você preferir não fazer isso, uma exceção 'adaptador não especificado' evitaria muitos problemas.

@mislav Eu ia dizer exatamente o que @bluefuton acabou de dizer. Quer dizer, é chamado de "default_adapter", o que sugere que é o padrão.

Oh, fui mordido pela mesma coisa. Mensagem de erro criptografada para o que provavelmente é um erro comum. (Eu removi a especificação do adaptador porque erroneamente assumi que não precisava ser explícita.)

@mislav Você aceitaria uma solicitação de pull para alterar o erro para algo como "Nenhum adaptador especificado"?

Ou (mas você parece não querer isso) assumir o "adaptador padrão" se nada for especificado explicitamente?

Oh, ei @pengwynn , percebi que você também faz parte desta organização. Já que Mislav não respondeu acima, alguma opinião sobre isso? Não pretendo pisar no pé de ninguém - se Mislav fizer essas ligações, não quero ignorá-lo :)

A mensagem deve ser melhor. Embora, como eu disse, nenhum middleware funcione realmente sem um adaptador. Portanto, melhorar a mensagem de erro especificamente para este middleware deixa outras falhas crípticas em outro middleware.

A solução adequada deve ser que Faraday aborta mais cedo quando um objeto Connection não inclui um adaptador na pilha. Assine um dos # 47, # 121, # 170

@mislav Aha, obrigado pelo esclarecimento!

Acho que tentarei fazer uma solicitação de pull apenas para melhorar a mensagem de erro do logger - parece que pode ser uma mudança bastante simples que melhoraria um problema comum. Espero que esteja tudo bem.

Posso procurar a solução adequada também, mas parece mais desafiador, então posso não ter tempo ou habilidade para fazer isso.

Esta página foi útil?
0 / 5 - 0 avaliações

Questões relacionadas

jeffb-stell picture jeffb-stell  ·  5Comentários

Lewiscowles1986 picture Lewiscowles1986  ·  4Comentários

subvertallchris picture subvertallchris  ·  5Comentários

JasonBarnabe picture JasonBarnabe  ·  4Comentários

ryanbyon picture ryanbyon  ·  3Comentários