Część tego zamieszania pochodzi z mojej sytuacji - dziedziczenie gem do utrzymania - wzdłuż tej linii w gemspec:
gem.add_dependency 'savon'
nie ma version number specified, więc najnowsza run przełączony na użyciu Savon 2 , które porzuciło globalne zachowanie Savon.configure
. Jeśli jesteś w tej samej łodzi, jak ja, zmieniając linię do ostatniej pre-2.0 wersji Savon będzie rozwiązać problem:
gem.add_dependency 'savon', '~>1.2.0'
Następnie bundle install
i powinno być dobrze.
Lub chcesz uaktualnić swój kod. Wiem, że to robię.
Savon.configure
został usunięty z Savon 2.0, ponieważ "problem was global state". Najszybszym sposobem zachowania tego samego zachowania w aplikacji byłoby zdefiniowanie globalnego skrótu na poziomie aplikacji w tym samym miejscu. Następnie przekazywałbyś ten skrót do każdego wywoływanego połączenia Savon.client
. Na przykład:
# 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)
Uważam to za punkt wyjścia do przejścia na styl konfiguracji 2.0. Najlepszym rozwiązaniem jest zawsze rozważenie client-specific 2.0 options available podczas inicjowania każdego klienta Savon.
proszę, aby każdy zawsze uzależniał twoje klejnotowe zależności od przynajmniej wersji głównej. dziękuję za napisanie tej naprawdę przydatnej odpowiedzi. – rubiii
Chciałem zapytać, gdzie piszesz ten APP_OPTS, w pliku w config/inicjalizatorach, jak gdzie był kod konfiguracyjny? Używałem Savona 1.0 i otrzymałem metodę nie znalezioną w savon.config, ale mam inny projekt używający go dokładnie w ten sam sposób i działa, czy to możliwe, że jedna z zależności rzuci ten wyjątek? dzięki za pomoc –
W moim przykładzie, APP_OPTS jest po prostu stała aplikacji. Ważną linią jest '@client = Savon :: Client.new (APP_OPTS)', która powinna zostać zainicjowana, gdy potrzebujesz instancji obiektu klienta Savon (2.0). Co do twojego błędu, sprawdziłbym twoją Gemfile.lock. To, co opisujesz, brzmi dokładnie tak, jak błąd Savona 1 -> 2, na który natrafiłem –