2016-11-15 117 views
0

我試圖在我的模型中輸入座標時輸入座標。錯誤 - :在Google地理編碼調用期間遇到錯誤:SSL_connect SYSCALL返回= 5 errno = 0 state = SSLv2/v3讀取服務器hello A

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' 

回答

0

我不打算評論,但沒有人發佈任何內容。由於您的特定錯誤消息包含SSL警告,因此我會檢查您是否需要明確要求openssl和/或您的openssl設置是否正確。雖然堆棧跟蹤有點不同,但我的應用程序中存在類似的地址解析問題。地理編碼完成花了很長時間(因爲地址真的很奇怪),但是我的其他代碼一直在繼續。我認爲堆棧跟蹤是Geokit中的一個錯誤。既然你沒有對如何快速控制這個運行時,您應考慮首先做的事情,以減少你正在做這個調用次數,所以在最低限度:

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

你也應該考慮將full_address存儲爲計算字段,因爲上次的代碼在第一次訪問模型的每個實例時仍會運行。因此,擺脫代碼的上方,而不是添加full_address場和保存前鉤:

在遷移文件:

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變量時纔會調用該調用,而不是每次訪問該地址時都會調用。

相關問題