OS X Sierra上的Ruby 1.8.7-p375。我遇到了一个与联邦快递公司谈判加速SOAP服务段错误的库的问题。
~/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/httpclient-2.7.2/lib/httpclient/ssl_socket.rb:46: [BUG] Segmentation fault
ruby 1.8.7 (2013-12-22 patchlevel 375) [i686-darwin16.1.0]'
这是一个陷入Rails 2 / Ruby 1.8.7的遗留应用程序,我在我的开发笔记本电脑上运行OS X Sierra。
完整的调用堆栈包括一个fedex库,soap4r和httpclient,这使得创建一个最小的失败案例非常困难(尽管我还在尝试)。另外,这只发生在OS X中。在Debian上 - 甚至是Debian 8 - 我在运行这个遗留代码时没有问题。
完整堆栈跟踪无应用程序代码:
httpclient (2.7.2) lib/httpclient/ssl_socket.rb:46:in `ssl_connect'
httpclient (2.7.2) lib/httpclient/ssl_socket.rb:24:in `create_socket'
httpclient (2.7.2) lib/httpclient/session.rb:739:in `connect'
~/.rbenv/versions/1.8.7-p375/lib/ruby/1.8/timeout.rb:67:in `timeout'
httpclient (2.7.2) lib/httpclient/session.rb:735:in `connect'
httpclient (2.7.2) lib/httpclient/session.rb:497:in `query'
httpclient (2.7.2) lib/httpclient/session.rb:170:in `query'
httpclient (2.7.2) lib/httpclient.rb:1238:in `do_get_block'
httpclient (2.7.2) lib/httpclient.rb:1021:in `do_request'
httpclient (2.7.2) lib/httpclient.rb:1129:in `protect_keep_alive_disconnected'
httpclient (2.7.2) lib/httpclient.rb:1016:in `do_request'
httpclient (2.7.2) lib/httpclient.rb:858:in `request'
httpclient (2.7.2) lib/httpclient.rb:761:in `post'
~/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/soap4r-ng-2.0.3/lib/soap/streamHandler.rb:238:in `send_post'
~/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/soap4r-ng-2.0.3/lib/soap/streamHandler.rb:172:in `send'
~/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/soap4r-ng-2.0.3/lib/soap/rpc/proxy.rb:187:in `route'
~/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/soap4r-ng-2.0.3/lib/soap/rpc/proxy.rb:150:in `call'
~/.rbenv/versions/1.8.7-p375/lib/ruby/gems/1.8/gems/soap4r-ng-2.0.3/lib/soap/rpc/driver.rb:152:in `call'
(eval):6:in `getRates'
这是我用来安装Ruby 1.8.7的过程:https://gist.github.com/wmakley/8dfe436dfe345efae3ddf6756f9766b6
我希望OpenSSL 0.9.8可以解决这个问题,但没有骰子。
对任何建议开放!我的最小测试代码实际上有效,但我可能没有做任何必要的事情来创建相同的环境:
的Gemfile:
gem 'httpclient', '~> 2.7.0' # required by soap4r-ng; 2.8 doesn't work in ruby 1.8
gem 'soap4r-ng'
Ruby代码:
require 'httpclient'
require 'soap/soap'
client = HTTPClient.new(nil, SOAP::VERSION::FORK_STRING)
client.post(
'https://gateway.fedex.com:443/web-services',
LOTS OF XML INCLUDING SECRETS,
{
'SOAPAction' => 'getRates',
'ContentType' => 'text/xml; charset=utf-8'
}
)