我目前遇到了一些严重的问题,包括ruby,谷歌地理编码api和openssl。我正在运行Mac OS X 10.11.3,rvm 1.27.0和ruby 2.2.2。 openssl版本就是问题所在。
当我尝试使用我的api密钥访问Google的地理编码服务时出现问题,这需要ssl。无论我使用的是result = Geocoder.search("Some Address, USA"),
还是更典型的HTTParty.get("https://maps.googleapis.com/maps/api/geocode/json?address=Some+Address+US&key=MyApiKey)"
,我仍然会收到错误消息。
错误是
/Users/me/.rvm/rubies/ruby-2.2.2/lib/ruby/2.2.0/net/http.rb:923:in 'connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)
,以及Geocoder.search()
函数的回溯。
我发现很多人都遇到了ruby的openssl问题,所以我检查了openssl version
并返回OpenSSL 0.9.8zg 14 July 2015
。我按照这篇文章的建议(http://railsapps.github.io/openssl-certificate-verify-failed.html)并运行rvm osx-ssl-certs update all
,以及用自制软件重新安装openssl,但即便如此,我的终端也说openssl已经是最新的。在这一点上,很明显我有两个openssl安装,/usr/bin/
中的旧安装0.98和另一个安装自制安装的安装。我最后一次尝试修复此问题是运行brew link openssl --force
,但我收到此错误:
Warning: Refusing to link: openssl
Linking keg-only openssl means you may end up linking against the insecure,
deprecated system OpenSSL while using the headers from Homebrew's openssl.
Instead, pass the full include/library paths to your compiler e.g.:
-I/usr/local/opt/openssl/include -L/usr/local/opt/openssl/lib
如何将ruby编译器与自制软件的ssl版本链接?我是否必须在每个终端会话中手动执行此操作?
我编写的脚本的简单版本就是这个
require 'geocoder'
require 'HTTParty'
Geocoder.configure(
:google => {
:api_key => "AIzaSyAG_TrgufZrrNTiwwBu2NP_xCXy3OGsH7M"
})
address = "350 5th Ave, New York, NY"
result = Geocoder.search(address)
print result