【问题标题】:Upgrading Faraday gem: RuntimeError: Adapter should be set using the `adapter` method, not `use`升级 Faraday gem: RuntimeError: Adapter 应该使用 `adapter` 方法设置,而不是 `use`
【发布时间】:2019-09-30 06:55:35
【问题描述】:

我对 RoR 比较陌生,现在我想将法拉第从 0.15.4 升级到 0.16.2,我认为我需要改变将法拉第插入中间件堆栈的方式。但是我该怎么做呢?

升级法拉第 gem 后,我从 Minitest 收到以下错误:

RuntimeError: Adapter should be set using the `adapter` method, not `use`

通常谷歌搜索确切的错误消息对我来说很好,不幸的是这次我不太幸运,只在法拉第代码中找到了文字字符串:)

这个错误是由法拉第在我的一个测试文件中使用时引发的:

def extend_middleware(builder)
  builder.use Ahora::Middleware::RequestLogger, SemanticLogger[Reader]
  builder.use Faraday::Adapter::Typhoeus
end

我的印象是解决方案应该相对简单,只需更改上面的builder.use 行。但我不知道如何将其转换为错误消息中提到的 adapter 方法。如果有人能指出“使用”和“适配器”方法之间的区别(我想了解这个问题!)并可能指出我的解决方案,那将对我有很大帮助:D

【问题讨论】:

    标签: ruby-on-rails ruby faraday


    【解决方案1】:

    Faraday 团队有一个文档 put online 可以帮助解决 0.15.4 版本的任何向后兼容性错误。

    有一段关于你的问题:

    为了指定适配器,您现在必须在连接构建器上使用 #adapter 方法。如果您不这样做并且您的适配器从 Faraday::Adapter 继承,那么 Faraday 将引发异常。否则,Faraday 将自动将默认适配器压入堆栈末尾,导致您的请求被执行两次。

    class OfficialAdapter < Faraday::Adapter
      ...
    end
    
    class MyAdapter
      ...
    end
    
    # This will raise an exception
    conn = Faraday.new(...) do |f|
      f.use OfficialAdapter
    end
    
    # This will cause Faraday inserting the default adapter at the end of the stack
    conn = Faraday.new(...) do |f|
      f.use MyAdapter
    end
    
    # You MUST use `adapter` method
    conn = Faraday.new(...) do |f|
      f.adapter AnyAdapter
    end
    

    【讨论】:

    • 这消除了错误,但我不确定它在语义上是否等效(必须做一些测试才能看到 builder 实际做了什么)
    • 原来,builder 实际上 一个连接,所以修复相对简单:```builder.adapter Faraday::Adapter::Typhoeus `` `
    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-10
    相关资源
    最近更新 更多