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

时间:2012-12-19 05:45:13

标签: ruby gem savon

我在使用此代码段

的gem中收到了上述错误
Savon.configure do |config|
  config.log = false
  config.log_level = :error
  HTTPI.log = false
end

此代码用于传递Travis的过去运行,因此我不确定为什么在更改自述文件时这会发生变化。

1 个答案:

答案 0 :(得分:15)

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

gem.add_dependency 'savon'

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

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

然后bundle install,你应该很好。


或者您想要升级代码。我知道我这样做。

Savon.configure已从Savon 2.0中移除,因为" problem was global state"。在应用程序中保持行为相同的最快方法是在同一位置定义应用级别的全局哈希。然后,您将此哈希值传递给您所做的每个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客户端时,应始终考虑client-specific 2.0 options available