Faraday: Middleware logger baru saja crash

Dibuat pada 28 Okt 2013  ·  9Komentar  ·  Sumber: lostisland/faraday

Program sederhana ini crash karena ketika logger dipanggil belum ada header dan body.

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

Komentar yang paling membantu

Ini diharapkan. Tak satu pun dari middleware dapat bekerja tanpa permintaan HTTP dibuat, yaitu tanpa adaptor.

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

Semua 9 komentar

Ini diharapkan. Tak satu pun dari middleware dapat bekerja tanpa permintaan HTTP dibuat, yaitu tanpa adaptor.

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

@mislav sementara ini adalah perilaku yang diharapkan, pesan kesalahan yang dihasilkan bisa lebih bermanfaat.

Saya setuju dengan @sethvargo , pesannya bisa lebih baik.

Dalam kasus saya, saya beralih dari tanpa parameter ke Faraday.new dan kemudian menambahkan conn.response :logger . Saya mengharapkan adapter menjadi default_adapter secara default, jadi saya cukup bingung dengan kesalahan baru. Itu tidak membantu bahwa saya sedang men-debug kesalahan lain, jadi saya pikir ini mungkin gejala lain dari kesalahan asli saya.

Saya juga mengalami masalah ini. Saya akan mengatakan bahwa perilaku yang diharapkan adalah Faraday menggunakan adaptor default jika tidak ditentukan.

Jika Anda lebih suka tidak melakukan ini, pengecualian 'adaptor tidak ditentukan' akan menghemat banyak goresan kepala.

@mislav Saya baru saja akan mengatakan apa yang baru saja dikatakan

Oh, saya baru saja digigit oleh hal yang sama. Pesan kesalahan samar untuk kemungkinan kesalahan umum. (Saya menghapus spesifikasi adaptor karena saya keliru menganggapnya tidak perlu eksplisit.)

@mislav Apakah Anda menerima permintaan tarik untuk mengubah kesalahan menjadi sesuatu seperti "Tidak ada adaptor yang ditentukan"?

Atau (tetapi Anda tampaknya tidak menginginkan ini) untuk menganggap "adaptor default" jika tidak ada yang ditentukan secara eksplisit?

Oh, hai @pengwynn , perhatikan bahwa Anda juga bagian dari organisasi ini. Karena Mislav tidak menjawab di atas, ada pemikiran tentang ini? Namun, tidak bermaksud menginjak kaki siapa pun – jika Mislav membuat panggilan ini, saya tidak ingin melewatinya :)

Pesannya harus lebih baik. Meskipun, seperti yang saya katakan, tidak ada middleware yang benar-benar berfungsi tanpa adaptor. Jadi, memperbaiki pesan kesalahan khusus untuk middleware ini meninggalkan kegagalan samar lainnya di middleware lain.

Solusi yang tepat adalah bahwa Faraday membatalkan lebih awal ketika objek Connection tidak menyertakan adaptor di tumpukan. Silakan berlangganan salah satu dari #47, #121, #170

@mislav Aha, terima kasih telah mengklarifikasi!

Saya pikir saya akan mencoba membuat permintaan tarik hanya untuk memperbaiki pesan kesalahan dari logger – sepertinya itu bisa menjadi perubahan yang cukup sederhana yang akan meningkatkan gotcha umum. Semoga tidak apa-apa.

Saya mungkin melihat ke perbaikan yang tepat juga, tetapi tampaknya lebih menantang, jadi saya mungkin tidak punya waktu atau keterampilan untuk mencapainya.

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

mvastola picture mvastola  ·  4Komentar

JasonBarnabe picture JasonBarnabe  ·  4Komentar

amrrbakry picture amrrbakry  ·  4Komentar

ryanbyon picture ryanbyon  ·  3Komentar

jedeleh picture jedeleh  ·  3Komentar