我在使用此代码段的 gem 中遇到上述错误

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

该代码过去曾在Travis上运行,因此我不确定为什么在更改自述文件时为什么会更改。

最佳答案

这种困惑的部分原因是我的处境-继承了要维护的gem-以及gemspec中的这一行:

gem.add_dependency 'savon'

没有version number specified,因此最新的运行切换为使用Savon 2,它放弃了Savon.configure全局行为。如果您与我同在一条船上,那么将此行更改为Savon的最新2.0之前版本将解决此问题:
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

关于ruby - Savon :Module的未定义方法 `configure',我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13946227/

10-13 07:36