ruby - Savon :Module 的未定义方法 `configure'

标签 ruby gem savon

我在使用此代码片段的 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 全局行为。如果您和我在同一条船上,将此行更改为最新的 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 配置样式的起点。理想情况下,您应该始终考虑 client-specific 2.0 options available在初始化每个 Savon 客户端时。

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

相关文章:

ruby-on-rails - 带有自定义绑定(bind)的 Savon

ruby-on-rails - Ruby path_to 仅在显式时有效

ruby-on-rails - 使用或不使用 Rails protect_from_forgery 打开请求伪造保护?

ruby-on-rails - 如何将 ActionController::RoutingError 分类为 Sentry 中的错误

ruby-on-rails - 如何使用 Rails 中的 Paperclip 将文件系统中的图像添加到模型中?

ruby - Mac Snow Leopard 上的 Curb gem 出现问题

css - Sass --compass --watch 错误 : Cannot load compass

soap - 如何设置 savon 版本 2 的参数

ruby-on-rails - 如何发现 Ruby/Rails 中的重写方法?

ruby-on-rails - 使用 Netsuite Ruby Gem 获取事务时出错 - Savon::SOAPFault: (soapenv:Server.userException)