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.
fonte
2012-12-19 05:45:12
si prega di incastrare sempre le dipendenze della gemma almeno in una versione principale. grazie per aver scritto questa risposta davvero utile. – rubiii
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 –
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 –