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>'
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.
Komentar yang paling membantu
Ini diharapkan. Tak satu pun dari middleware dapat bekerja tanpa permintaan HTTP dibuat, yaitu tanpa adaptor.