この単純なプログラムは、ロガーが呼び出されたときにヘッダーと本文がまだないためにクラッシュします。
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>'
これは予想されます。 どのミドルウェアも、HTTP要求が行われない限り、つまりアダプターがないと機能しません。
Faraday.new(url: "http://google.com") do |conn|
conn.response :logger
conn.adapter Faraday.default_adapter
end
@mislavこれは予想される動作ですが、結果のエラーメッセージの方が便利な場合があります。
私は@sethvargoに同意し
私の場合、パラメータなしからFaraday.new
から、 conn.response :logger
追加しました。 デフォルトではadapter
がdefault_adapter
になると思っていたので、新しいエラーでかなり混乱しました。 別のエラーをデバッグしているのは役に立たなかったので、これは元のエラーの別の症状である可能性があると思いました。
私もこの問題に遭遇しました。 予想される動作は、指定されていない場合、Faradayがデフォルトのアダプターを使用することです。
これを実行したくない場合は、「アダプターが指定されていません」という例外により、頭をかきむしる手間を大幅に節約できます。
@mislav私は言った@bluefuton、まさに言うことを約ありました。 これは「default_adapter」と呼ばれていることを意味します。これは、これがデフォルトであることを示しています。
ああ、私は同じことで噛まれました。 よくある間違いの可能性についての不可解なエラーメッセージ。 (明示的である必要はないと誤って想定したため、アダプターの仕様を削除しました。)
@mislavエラーを「アダプタが指定されていません」のようなものに変更するプルリクエストを受け入れますか?
または(ただし、これは望ましくないようです)明示的に何も指定されていない場合、「デフォルトアダプタ」を想定しますか?
ああ、ちょっと@pengwynn 、あなたもこの組織の一員であることに気づきました。 Mislavは上記に返信しなかったので、これについて何か考えはありますか? しかし、誰かのつま先を踏むつもりはありません–ミスラフがこれらの電話をかけた場合、私は彼を迂回したくありません:)
メッセージはもっと良くなるはずです。 しかし、私が言ったように、どのミドルウェアも実際にはアダプターなしでは機能しません。 したがって、このミドルウェア専用のエラーメッセージを改善すると、他のミドルウェアに他の不可解な障害が残ります。
適切な解決策は、Connectionオブジェクトのスタックにアダプターが含まれていない場合、ファラデーが早期に中止することです。 #47、#121、#170のいずれかを購読してください
@mislavああ、明確にしてくれてありがとう!
ロガーからのエラーメッセージを改善するためだけにプルリクエストを作成しようと思います。これは、一般的な落とし穴を改善する非常に単純な変更である可能性があります。 大丈夫だといいのですが。
適切な修正も検討するかもしれませんが、それはもっと難しいように思われるので、それを達成するための時間やスキルがないかもしれません。
最も参考になるコメント
これは予想されます。 どのミドルウェアも、HTTP要求が行われない限り、つまりアダプターがないと機能しません。