2012-12-19 18 views
8

sto ottenendo l'errore di cui sopra in una gemma con questo frammento di codicemetodo non definito `configure' per Savon: Modulo

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

Questo codice utilizzato per passare in passato, gira su Travis, quindi non sono sicuro perché questo è cambiato quando ho modificato il file Leggimi.

risposta

15

Una parte di questa confusione viene dalla mia situazione - ereditando un gioiello per mantenere - insieme a questa linea nel gemspec:

gem.add_dependency 'savon' 

Non c'è version number specified, in modo che il più recente corsa passa ad utilizzare Savon 2 , che ha abbandonato il comportamento globale Savon.configure. Se siete nella stessa barca, come me, cambiando questa riga all'ultima versione pre-2.0 di Savon risolverà il problema:

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

Poi bundle install e si dovrebbe essere buono.


Oppure si desidera aggiornare il codice. Lo so che lo faccio.

Savon.configure è stato rimosso da Savon 2.0 perché "". Il modo più rapido per mantenere lo stesso comportamento nella tua app consiste nel definire un hash globale a livello di app nello stesso posto. Passerai quindi questo hash in ogni chiamata effettuata da Savon.client. Ad esempio:

# 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) 

Considererei questo un punto di partenza per migrare allo stile di configurazione 2.0. Idealmente, si dovrebbe sempre considerare client-specific 2.0 options available durante l'inizializzazione di ogni client Savon.

+1

si prega di incastrare sempre le dipendenze della gemma almeno in una versione principale. grazie per aver scritto questa risposta davvero utile. – rubiii

+0

Volevo chiedere, dove si scrive APP_OPTS, in un file in config/inizializzatori come se fosse il codice di configurazione? Stavo usando savon 1.0 e stavo ottenendo il metodo non trovato con savon.config, ma ho un altro progetto che lo utilizza esattamente allo stesso modo e funziona, è possibile che una delle dipendenze generi quell'eccezione? grazie per il tuo aiuto –

+0

Nel mio esempio, APP_OPTS è solo una costante di applicazione. La linea importante è '@client = Savon :: Client.new (APP_OPTS)', che dovrebbe essere inizializzata quando hai bisogno di un'istanza dell'oggetto client Savon (2.0). Per quanto riguarda il tuo errore, vorrei ricontrollare il tuo Gemfile.lock. Quello che descrivi sembra esattamente come un errore Savon 1 -> 2 in cui mi sono imbattuto –

Problemi correlati