2012-12-19 73 views
8

我得到上述錯誤的寶石與此代碼段未定義的方法`爲薩翁配置」:模塊

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

這個代碼用在過去通過運行在特拉維斯,所以我不知道爲什麼這改變了,當我改變自述。這種混亂的

回答

15

一部分來自我的情況 - 這條線在沿gemspec - 繼承寶石維護:

gem.add_dependency 'savon' 

有沒有version number specified,所以最新的運行切換到使用薩翁2 ,這拋棄了全球行爲。如果你在同一條船上是作爲我來說,改變這一行薩翁最後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遷移到2.0配置風格的起點。理想情況下,初始化每個Savon客戶端時應始終考慮client-specific 2.0 options available

+1

請大家總是把你的寶石依賴關係降到至少一個主要版本。感謝您撰寫這個真正有用的答案。 – rubiii

+0

我想問你在哪裏寫APP_OPTS,在配置/初始化程序中的配置代碼所在的文件中?我正在使用savon 1.0,並且沒有找到savon.config找到的方法,但是我有另一個使用它的工程,方法和工作方式完全相同,有可能是其中一個依賴項引發異常?感謝您的幫助 –

+0

在我的示例中,APP_OPTS只是一個應用程序常量。重要的一行是'@client = Savon :: Client.new(APP_OPTS)',當你需要一個Savon(2.0)客戶端對象的實例時,它應該被初始化。至於你的錯誤,我會仔細檢查你的Gemfile.lock。你所描述的聽起來就像我遇到的薩翁1 - > 2錯誤 –

相關問題