一部は、私の状況から来ている - を維持するために宝石継承 - この行と一緒にgemspec中を:
gem.add_dependency 'savon'
そこにはversion number specifiedはませんので、最新の実行がサボン2を使用してに切り替えこれはSavon.configure
のグローバルな振る舞いを止めました。あなたが私と同じ船に乗っている場合は、問題を解決しますサボンの最後の前の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
私は、あなたがそのAPP_OPTSを書いたところで、設定コードのようなconfig/initializersのファイルに質問したがっていますか?私はsavon 1.0を使用していて、savon.configで見つからないメソッドを取得していましたが、他のプロジェクトとまったく同じ方法で動作していますが、依存関係の1つがその例外をスローする可能性はありますか?あなたの助けをありがとう –
私の例では、APP_OPTSは単なるアプリケーション定数です。重要な行は '@client = Savon :: Client.new(APP_OPTS)'です。これはSavon(2.0)Clientオブジェクトのインスタンスが必要なときに初期化する必要があります。あなたのエラーについては、私はあなたのGemfile.lockを再度チェックします。あなたが描いているのは、私が遭遇したSavon 1 - > 2エラーのようなものです –