9

我在带有此代码段的 gem 中收到上述错误

Savon.configure do |config|
  config.log = false
  config.log_level = :error
  HTTPI.log = false
end

这段代码过去在 Travis 上运行过,所以我不确定为什么在我更改自述文件时会发生变化。

4

1 回答 1

16

这种困惑的一部分来自我的情况——继承要维护的 gem——以及 gemspec 中的这一行:

gem.add_dependency 'savon'

没有指定版本号,所以最新的运行切换到使用 Savon 2,它放弃了Savon.configure全局行为。如果你和我在同一条船上,将此行更改为 Savon 的最后一个 pre-2.0 版本将解决问题:

gem.add_dependency 'savon', '~>1.2.0'

然后bundle install你应该很好。


或者你想升级你的代码。我知道我知道。

Savon.configure已从 Savon 2.0 中删除,因为“问题是全局状态”。在您的应用程序中保持相同行为的最快方法是在同一位置定义应用程序级全局哈希。然后,您会将此哈希传递到Savon.client您进行的每个调用中。例如:

# Where Savon.configure was called
APP_OPTS = {
  # disable request logging, silences HTTPI as well
  log:       false,
  # Don't log Laundry xmls to STDOUT
  log_level: :error,
  #... etc
}

# Elsewhere
@client = Savon::Client.new(APP_OPTS)

我认为这是迁移到 2.0 配置风格的起点。理想情况下,在初始化每个 Savon 客户端时,您应该始终考虑可用的特定于客户端的 2.0 选项。

于 2012-12-19T05:45:12.573 回答