Faraday: Промежуточное ПО регистратора просто аварийно завершает работу

Созданный на 28 окт. 2013  ·  9Комментарии  ·  Источник: lostisland/faraday

Эта простая программа вылетает из-за того, что при вызове регистратора еще нет заголовков и тела.

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

Все 9 Комментарий

Это ожидаемо. Ни одно промежуточное ПО не может работать без 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 , поэтому я был достаточно смущен новой ошибкой. То, что я отлаживал другую ошибку, не помогло, поэтому я подумал, что это могло быть еще одним признаком моей исходной ошибки.

Я тоже столкнулся с этой проблемой. Я бы сказал, что ожидаемое поведение таково, что Фарадей использует адаптер по умолчанию, если он не указан.

Если вы не хотите этого делать, исключение «адаптер не указан» избавит вас от многих проблем.

@mislav Я собирался сказать именно то, что только что сказал @bluefuton . Я имею в виду, что он называется "default_adapter", что предполагает, что он используется по умолчанию.

О, меня просто укусило то же самое. Загадочное сообщение об ошибке, которое, вероятно, является распространенной ошибкой. (Я удалил спецификацию адаптера, потому что ошибочно предположил, что это не обязательно должно быть явным.)

@mislav Вы бы приняли запрос на

Или (но вы, кажется, этого не хотите) использовать «адаптер по умолчанию», если ничего не указано явно?

О, привет @pengwynn , заметил, что ты тоже часть этой организации. Поскольку Мислав не ответил выше, есть мысли по этому поводу? Но не хочу никому наступать на ногу - если Мислав делает эти звонки, я не хочу его обходить :)

Сообщение должно быть лучше. Хотя, как я уже сказал, ни одно промежуточное ПО не будет работать без адаптера. Таким образом, улучшение сообщения об ошибке специально для этого промежуточного программного обеспечения оставляет другие загадочные ошибки в другом промежуточном программном обеспечении.

Правильным решением должно быть преждевременное прерывание Faraday, когда объект Connection не включает адаптер в стек. Пожалуйста, подпишитесь на один из # 47, # 121, # 170

@mislav Ага, спасибо за разъяснения!

Думаю, я попытаюсь сделать пул-реквест только для того, чтобы улучшить сообщение об ошибке из регистратора - похоже, что это может быть довольно простое изменение, которое улучшит общую проблему. Надеюсь, что все в порядке.

Я мог бы также поискать правильное решение, но оно кажется более сложным, поэтому у меня может не хватить времени или навыков для этого.

Была ли эта страница полезной?
0 / 5 - 0 рейтинги