2012-12-19 13 views
8

मैं इस कोड स्निपेटअपरिभाषित विधि `Savon के लिए कॉन्फ़िगर ': मॉड्यूल

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

अतीत में पारित करने के लिए प्रयोग किया जाता है इस कोड के साथ एक मणि में ऊपर त्रुटि मिल रही है ट्रैविस पर चलता है, तो मैं यकीन नहीं है जब मैंने रीडेमे को बदल दिया तो यह क्यों बदल गया। इस भ्रम का

उत्तर

15

भाग मेरी स्थिति से आता है - 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 पर विचार करना चाहिए।

+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 त्रुटि जैसा लगता है जिसमें मैंने भाग लिया था –

संबंधित मुद्दे