일부는 내 상황에서 온다 - 유지하기 위해 보석을 상속 - 함께 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
은 "problem was global state"이기 때문에 Savon 2.0에서 제거되었습니다. 앱에서 동작을 동일하게 유지하는 가장 빠른 방법은 앱 수준의 글로벌 해시를 같은 위치에 정의하는 것입니다. 그런 다음이 해시를 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을 고려해야합니다.
모두에게 항상 최소한 주 버전에 보석 종속성을 고정 시키십시오. 이 정말로 도움이되는 대답을 작성해 주셔서 감사합니다. – rubiii
config 코드의 위치와 같은 config/initializers 파일에 APP_OPTS를 어디에 쓰는지 묻고 싶습니다. savon 1.0을 사용하고 있는데 savon.config와 함께 메서드를 찾을 수 없지만 정확하게 동일한 방식으로 작동하는 다른 프로젝트가 있는데 종속성 중 하나가 해당 예외를 throw 할 가능성이 있습니까? 귀하의 도움을 주셔서 감사합니다 –
내 예제에서 APP_OPTS는 단지 상수입니다. 중요한 라인은'@client = Savon :: Client.new (APP_OPTS)'이다. Savon (2.0) Client 객체의 인스턴스가 필요할 때 초기화되어야한다. 당신의 오류에 관해서는, 나는 당신의 Gemfile.lock을 다시 한번 점검 할 것입니다. 당신이 설명하는 내용은 Savon 1 -> 2 오류와 정확히 같게 들립니다. –