Savon的未定义方法`configure':模块

Eri*_* Hu 8 ruby gem savon

我在这个代码片段的gem中得到了上述错误

Savon.configure do |config|
  config.log = false
  config.log_level = :error
  HTTPI.log = false
end
Run Code Online (Sandbox Code Playgroud)

这段代码用于传递Travis的过去运行,所以当我改变自述文件时,我不确定为什么这会改变.

Eri*_* Hu 15

这种混乱的部分原因来自我的情况 - 继承宝石以维持 - 以及gemspec中的这一行:

gem.add_dependency 'savon'
Run Code Online (Sandbox Code Playgroud)

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

gem.add_dependency 'savon', '~>1.2.0'
Run Code Online (Sandbox Code Playgroud)

然后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)
Run Code Online (Sandbox Code Playgroud)

我认为这是迁移到2.0配置样式的起点.理想情况下,在初始化每个Savon客户端时,应始终考虑特定客户端的2.0选项.