Ruby on rails 错误--:在Google地理编码调用期间捕获到错误:SSL\u connect SYSCALL返回=5 errno=0 state=SSLv2/v3读取服务器hello A

Ruby on rails 错误--:在Google地理编码调用期间捕获到错误:SSL\u connect SYSCALL返回=5 errno=0 state=SSLv2/v3读取服务器hello A,ruby-on-rails,ruby,google-maps,geocode,geokit,Ruby On Rails,Ruby,Google Maps,Geocode,Geokit,我试图得到的地址时,输入坐标像这样在我的模型 def full_address Geocoder.address("#{self.latlon.x}, #{self.latlon.y}") end 然而,有时它工作得非常好,有时我会出现这个错误。我到处寻找解决办法,但没有一个适合我 warning: constant Geokit::Geocoders::Geocoder::TimeoutError is deprecated E, [2016-11-15T17:06:32.82

我试图得到的地址时,输入坐标像这样在我的模型

 def full_address
    Geocoder.address("#{self.latlon.x}, #{self.latlon.y}")
  end
然而,有时它工作得非常好,有时我会出现这个错误。我到处寻找解决办法,但没有一个适合我

warning: constant Geokit::Geocoders::Geocoder::TimeoutError is deprecated
E, [2016-11-15T17:06:32.828481 #7406] ERROR -- : Caught an error during Google geocoding call: SSL_connect SYSCALL returned=5 errno=0 state=SSLv2/v3 read server hello A
E, [2016-11-15T17:06:32.828665 #7406] ERROR -- : /Users/Brandon/.rvm/rubies/ruby-2.3.1/lib/ruby/2.3.0/net/http.rb:933:in `connect_nonblock'

我不打算发表评论,但没有人发表任何评论。由于您的特定错误消息包含SSL警告,我将检查您是否需要明确要求openssl和/或您的openssl设置是否正确。我在应用程序中遇到了类似的地理编码超时问题,尽管堆栈跟踪有点不同。地理编码花了很长时间才完成(例如,因为地址真的很奇怪),但我其余的代码一直在运行。我认为堆栈跟踪是Geokit中的一个bug。因为你无法控制这个运行速度有多快,所以你应该首先考虑做一些事情来减少你打这个电话的次数,所以在最低限度:

def full_address
  @full_address ||= Geocoder.address("#{self.latlon.x}, #{self.latlon.y}")
end

您还应该考虑将Full地址存储为计算字段,因为每次访问模型的第一次时,上述代码仍将运行。因此,去掉上面的代码,而是添加一个完整的_地址字段和一个before save钩子:

在迁移文件中:

add_column :models, :full_address, :string
在model.rb中:

before_save :geocode_address

def geocode_address
  self.full_address = Geocoder.address("#{self.latlon.x}, #{self.latlon.y}") if self.changed.include?("latlon")
end
这样,调用只在更新latlon.x和latlon.y变量时运行,而不是每次访问地址时运行